2016-08-08 4 views
1

у меня есть:Получить список расширенных классов в машинописном

classA 
classB extends ClassA 
classC extends ClassB 

Я создал объект на classC:

var myClassC= new classC(); 

ClassA имеет этот метод:

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

который возвращает "ClassC" string, если я вызываю 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)

Смежные вопросы