วิธีการที่ได้รับการป้องกันใน OOP ใน JavaScript
เมธอดส่วนตัวไม่ถูกรับมรดกและไม่สามารถมองเห็น จากภายนอกคลาส อย่างไรก็ตาม บางครั้งก็ต้องการเมธอด ที่ถูกรับมรดก แต่ไม่สามารถมองเห็นจากภายนอก คลาส เมธอดดังกล่าวเรียกว่า วิธีการที่ได้รับการป้องกัน (protected) น่าเสียดายที่ JavaScript ไม่รองรับ เมธอดดังกล่าว
ดังนั้นผมจึงเสนอให้ใช้อนุสัญญาบางอย่าง ที่อนุญาตให้สร้างเมธอดดังกล่าวขึ้นมา เราจะเริ่มต้นชื่อของเมธอดดังกล่าว ด้วยขีดล่าง ในความเป็นจริง เราใช้อนุสัญญาเก่าที่เป็นที่ยอมรับโดยทั่วไป เกี่ยวกับเมธอดส่วนตัว เพียงแต่เราเรียกเมธอดดังกล่าวว่าวิธีการที่ได้รับการป้องกัน เพื่อแสดงว่าพวกมันถูกรับมรดก แต่เราจะไม่ใช้พวกมัน จากภายนอก อย่างไรก็ตาม นี่เป็นวิธีที่พวกมัน ถูกนำมาใช้ตามอนุสัญญาโบราณนั่นเอง
เอาล่ะ มาเขียนคลาสแม่ ด้วยเมธอดที่ได้รับการป้องกัน:
class User {
setName(name) {
this.name = name;
}
getName() {
return this._capeFirst(this.name);
}
_capeFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
มาใช้เมธอดที่ได้รับการป้องกันนี้ ในคลาสลูก:
class Student extends User {
setSurn(surn) {
this.surn = surn;
}
getSurn() {
return this._capeFirst(this.surn);
}
}
ในโค้ดต่อไปนี้ ทำให้เมธอดตัวช่วย เป็นวิธีการที่ได้รับการป้องกัน:
class User {
setName(name) {
if (this.notEmpty(name)) {
this.name = name;
}
}
getName() {
return this.name;
}
notEmpty(str) {
return str.length > 0;
}
}
class Employee extends User {
setSurn(surn) {
if (this.notEmpty(surn)) {
this.surn = surn;
}
}
getSurn() {
return this.surn;
}
}