Модификатори protected дар TypeScript
Хусусиятҳо ва усулҳои хусусӣ аз ҷониби фарзандон мерос гирифта намешаванд. Аммо, баъзан ба мо лозим аст, ки хусусият ё усул аз берун дастрас набошанд, аммо аз ҷониби фарзандон мерос гирифта шаванд. Дар ин ҳолат бояд модификатори protected истифода шавад.
Биёед амалӣ санҷем. Дар синфи мо User усули cape-ро ҳамчун муҳофизатшуда бо модификатори protected эълон кунем:
class User {
protected cape(str: string) {
return str[0].toUpperCase() + str.slice(1);
}
}
Синфи Student-ро созем, ки аз синфи User мерос мегирад:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
}
Усуле илова кунем, ки номро чоп мекунад:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
public showName(): string {
return this.name;
}
}
Ва акнун усули муҳофизатшудаи волидайнро дар дохили усули фарзанд истифода барем:
class Student extends User {
private name: string;
constructor(name: string) {
super();
this.name = name;
}
public showName(): string {
return this.cape(this.name); // усули волидайнро истифода мебарем
}
}
Объекти синфи худро созем:
let student: Student = new Student('john');
Барои чопи донишҷӯ аз усул истифода барем:
console.log(student.showName());
Аммо кӯшиши даъвати усули cape аз беруни синф ба хатогӣ меорад:
console.log(student.cape('test')); // хатогӣ
Синфи зерин дода шудааст:
class User {
protected name: string;
protected surn: string;
constructor(name: string, surn: string) {
this.name = name;
this.surn = surn;
}
}
Аз ин синф синфи Employee-ро мерос гиред, ки хусусияти муҳофизатшудаи salary-ро илова мекунад, инчунин геттерҳои ҳамаи хусусиятҳоро, ҳам худӣ ва ҳам меросгирифташуда.