2016-08-08 10 views
1

の拡張クラスのリストを取得します:私が持っている活字体

classA 
classB extends ClassA 
classC extends ClassB 

私はクラスCの上にオブジェクトを作成しました:

var myClassC= new classC(); 

にClassAは、このメソッドを持っている: "クラスC" を返す

public get className(): string { 
    var funcNameRegex = /function (.{1,})\(/; 
    var results = (funcNameRegex).exec(this["constructor"].toString()); 
    return (results && results.length > 1) ? results[1] : ""; 
} 

私がmyClassC.getClassName()を呼び出すと文字列。

私が必要とするのは、基本クラスClassC、ClassB、ClassAまでのすべてのクラスのリストを取得することです。これを行う方法はありますか?

答えて

5

ええ、それは実際に可能である:

function getClassName(obj: any): string { 
    var funcNameRegex = /function (.{1,})\(/; 
    var results = (funcNameRegex).exec(obj.constructor.toString()); 
    return (results && results.length > 1) ? results[1] : ""; 
} 

class ClassA { 
    public get className(): string[] { 
     let classNames = []; 
     let obj = Object.getPrototypeOf(this); 
     let className: string; 

     while ((className = getClassName(obj)) !== "Object") { 
      classNames.push(className); 
      obj = Object.getPrototypeOf(obj); 
     } 

     return classNames; 
    } 
} 

class ClassB extends ClassA {} 

class ClassC extends ClassB {} 

let a = new ClassA(); 
console.log(a.className); // ["ClassA"] 

let b = new ClassB(); 
console.log(b.className); // ["ClassB", "ClassA"] 

let c = new ClassC(); 
console.log(c.className); // ["ClassC", "ClassB", "ClassA"] 

code in playground

関連する問題