NetjsのNObject.GetTypeの実装を見て目から鱗が落ちたのでメモ。
TypeScriptで実行中にオブジェクトが自分自身のクラス名を動的に知る方法です。つまり、変数の型が何であろうともnewされた時の型名が分かるかという問題です。
サンプルソース §
class ClassA {
tellMeClassName() {
console.log("My name is "+this.constructor.toString().match(/function (\w*)/)[1]);
}
}
class ClassB extends ClassA {
}
var a: ClassA = new ClassA();
var b: ClassA = new ClassB();
a.tellMeClassName();
b.tellMeClassName();
実行結果 §
My name is ClassA
My name is ClassB
つまり、ClassAを継承したClassBをnewした場合、変数の型がClassAであっても、それを実行するメソッドがClassAにあっても、正しく自分はClassBだと認識できています。