typescript - Bir mikste sınıf adını nasıl alabilirim?
Bir mixin sınıfının içinde tanımlanmış bir fonksiyonun içinde, mixin sınıfının kendi adı yerine mixini kullanan sınıfın adını nasıl alabilirim?
Yardımcı olmaya çalışmak için, işte benim kodum:
// this function is from TypeScript mixin documentation
function applyMixins(derivedCtor: any, baseCtors: any[]) {
baseCtors.forEach(baseCtor => {
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
derivedCtor.prototype[name] = baseCtor.prototype[name];
});
});
}
class ClassName {
public getClassName(): string {
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec(this.constructor.toString());
var className = (results && results.length > 1) ? results[1] : '';
return className;
}
}
class ExampleFoo implements ClassName {
getClassName: () => string;
}
applyMixins(ExampleFoo, [ClassName]);
ExampleFoo'u başlattığımda ve getClassName'i çağırdığımda "ClassName" yazdırıyor ama onun "ExampleFoo" yazdırmasını istiyorum:
console.log(new ExampleFoo().getClassName()) // => prints "ClassName"Cevap #1
Yapıcıyı kopylamamanızı öneririm. applyMixins fonksiyonunu şu şekilde değiştirin:
function applyMixins(derivedCtor: any, baseCtors: any[]) {
baseCtors.forEach(baseCtor => {
Object.getOwnPropertyNames(baseCtor.prototype).forEach(name => {
if (name !== 'constructor')
derivedCtor.prototype[name] = baseCtor.prototype[name];
});
});
}
