すべてのTypeScriptクラスは、以下から(直接的または間接的に)継承します。
export class WrObject {
className:string;
public instanceOf(name : String) : boolean {
return this.className === name;
}
}
次に、サブクラスを次のように宣言します。
export class Section extends WrObject {
public static CLASS_NAME = 'Section';
className = Section.CLASS_NAME;
public instanceOf(name : String) : boolean {
if (this.className === name)
return true;
return super.instanceOf(name);
}
}
そして、次のことを確認できます。
if (obj.instanceOf(Section.CLASS_NAME))
すべてうまくいきます。しかし、私たちができるならもっときれいになると思います:
if (obj.instanceOf(Section))
それを行う方法はありますか?または、より良いアプローチに関する提案はありますか?
ありがとう-デイブ
JavaScriptのプロトタイプの性質を受け入れたい場合は、プロトタイプチェーンをチェックするinstanceof
を使用できます。
class Foo{}
class Bar extends Foo{}
class Bas{}
var bar = new Bar();
console.log(bar instanceof Bar); // true
console.log(bar instanceof Foo); // true
console.log(bar instanceof Object); // true
console.log(bar instanceof Bas); // false
できます。 instanceOf
実装を次のものに置き換えてください:
public instanceOf(cls: { CLASS_NAME: string; }) {
return cls.CLASS_NAME === this.className || super.instanceOf(cls);
}
これはうまくいくと思います プレイグラウンドの例
var getName = function(obj) : string {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(obj);
return (results && results.length > 1) ? results[1] : "";
};
class Foo
{
}
function IsTypeOf(obj: any, type: Function)
{
alert(obj.constructor.name + " == " + getName(type));
}
IsTypeOf(new Foo(), Foo);
関連する