ตัวแก้ไข 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
และยังรวมถึงเก็ตเตอร์ของทุกคุณสมบัติ ทั้งของคุณเอง
และที่สืบทอดมา