Obține lista claselor extinse în TypeScript
Am:
classA
classB extends ClassA
classC extends ClassB
Am creat obiect pe classC:
var myClassC= new classC();
ClassA are această metodă:
public get className(): string {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(this["constructor"].toString());
return (results && results.length > 1) ? results[1] : "";
}
Care returnează șirul „ClassC” dacă apelez myClassC.getClassName();
Ceea ce am nevoie este să obțin o listă a tuturor claselor până la clasa de bază: ClassC, ClassB, ClassA. Există o modalitate de a face asta?
Răspuns #1
Da, asta este într-adevăr posibil:
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"]
(cod în teren de joacă)
