miras - TypeScript'te bir metodu doğru şekilde nasıl geçersiz kılarsınız?
show() metodunda this.fullName neden boş?
class Person {
protected name: string = "";
constructor(name: string) {
this.makeSir(name);
}
makeSir(name: string) {
this.name = "sir" + name;
}
}
class Man extends Person {
protected fullName = "";
constructor(name: string) {
super(name);
}
makeSir(name: string) {
super.makeSir(name);
this.fullName = "***" + name;
console.log(this.fullName);//[LOG]: "***john"
}
show() {
console.log(this.fullName);//[LOG]: ""
}
}
const man = new Man("john");
man.show();
Bunu nasıl düzeltebilirim?
Cevap #1
super(), türetilmiş bir sınıfı, sizin Man sınıfınız gibi, oluştururken her zaman çağrılan ilk şeydir. Bu, sizin yaptığınız herhangi bir değişken başlatmadan, örneğin protected fullName='' önce yapılması anlamına gelir. Bu nedenle, Man.makeSir çağrılıp fullName değerini doğru bir değere ayarlarken, hemen ardından sizin boş string atamanız devreye girer ve değerini temizler.
Bunu geç geçersiz kılmayı önlemenin bir yolu, fullName için başlangıç değeri belirlememektir:
// give it a type because we don't give it an initial value
// use `!` syntax to hint to TypeScript that this will be initialized during the constructor
// even though TS cannot figure that out itself
protected fullName!: string;
Şimdi, fullName'i hiçbir zaman bir "başlangıç" değerine ayarlamadığınız için, super() çağrısıyla yapılan çalışmayı asla üzerine yazmazsınız.
Cevap #2
class Person {
protected name: String ="";
constructor(name: string){
this.makeSir(name);
}
makeSir(name: string){
this.name="sir"+name ;
}
test(){
console.log("PERSON");
}
}
class Man extends Person {
public name: string ="";
constructor(name:string){
super(name);
this.makeSir(name);
}
makeSir(name:string){
this.name="####"+name;
}
test(){
console.log("Man ")
}
show(){
console.log("#####"+this.name);
}
}
const n = new Man("Man ")
n.show();
n.test();
const m = new Person("Person");
m.test();
Yapıcıda yalnızca super çağırıyorsunuz, bu da sırayla yalnızca üst sınıf yapıcısını çağırır.
Testin doğru şekilde geçersiz kılındığını görürsen
Çıktı :
#########Man
Man
PERSON
