2016-08-08 18 views
1

ich habe:Get Liste der erweiterten Klassen in Typoskript

classA 
classB extends ClassA 
classC extends ClassB 

Ich erstellte Objekt auf Klasse C:

var myClassC= new classC(); 

KlasseA hat diese Methode:

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

Welche "ClassC" zurück Zeichenfolge, wenn ich myClassC.getClassName() aufrufen;

Ich brauche eine Liste aller Klassen bis zur Basisklasse: ClassC, ClassB, ClassA. Gibt es eine Möglichkeit, dies zu tun?

Antwort

5

Ja, das ist in der Tat möglich:

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)