Herhangi bir miras yapmayı planlıyorsanız, tavsiye ederim this.constructor
. Bu basit örnek, nedenini göstermelidir:
class ConstructorSuper {
constructor(n){
this.n = n;
}
static print(n){
console.log(this.name, n);
}
callPrint(){
this.constructor.print(this.n);
}
}
class ConstructorSub extends ConstructorSuper {
constructor(n){
this.n = n;
}
}
let test1 = new ConstructorSuper("Hello ConstructorSuper!");
console.log(test1.callPrint());
let test2 = new ConstructorSub("Hello ConstructorSub!");
console.log(test2.callPrint());
test1.callPrint()
ConstructorSuper Hello ConstructorSuper!
konsola giriş yapacak
test2.callPrint()
ConstructorSub Hello ConstructorSub!
konsola giriş yapacak
Adlandırılmış Sınıfa başvuru yapan her işlevi açıkça yeniden tanımlamazsanız, adlandırılmış sınıf kalıtımla güzelce ilgilenmez. İşte bir örnek:
class NamedSuper {
constructor(n){
this.n = n;
}
static print(n){
console.log(NamedSuper.name, n);
}
callPrint(){
NamedSuper.print(this.n);
}
}
class NamedSub extends NamedSuper {
constructor(n){
this.n = n;
}
}
let test3 = new NamedSuper("Hello NamedSuper!");
console.log(test3.callPrint());
let test4 = new NamedSub("Hello NamedSub!");
console.log(test4.callPrint());
test3.callPrint()
NamedSuper Hello NamedSuper!
konsola giriş yapacak
test4.callPrint()
NamedSuper Hello NamedSub!
konsola giriş yapacak
Yukarıdakilerin tümünü Babel REPL'de bulabilirsiniz .
Bundan test4
hala süper sınıfta olduğunu düşünen görebilirsiniz ; bu örnekte büyük bir anlaşma gibi görünmeyebilir, ancak geçersiz kılınan üye işlevlerine veya yeni üye değişkenlere başvurmaya çalışıyorsanız, kendinizi belada bulacaksınız.
SomeObject.print
doğal hissediyor. Fakatthis.n
içte hiçbir anlam ifade etmiyor çünkü statik yöntemler hakkında konuşuyorsak örnek yok.