2018年03月30日
川俣晶の縁側ソフトウェア技術雑記 total 2959 count

TypeScriptで実行中にオブジェクトが自分自身のクラス名を動的に知る方法

Written By: 川俣 晶連絡先

 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だと認識できています。