วิธีการที่ได้รับการป้องกันใน OOP ใน JavaScript

เมธอดส่วนตัวไม่ถูกรับมรดกและไม่สามารถมองเห็น จากภายนอกคลาส อย่างไรก็ตาม บางครั้งก็ต้องการเมธอด ที่ถูกรับมรดก แต่ไม่สามารถมองเห็นจากภายนอก คลาส เมธอดดังกล่าวเรียกว่า วิธีการที่ได้รับการป้องกัน (protected) น่าเสียดายที่ JavaScript ไม่รองรับ เมธอดดังกล่าว

ดังนั้นผมจึงเสนอให้ใช้อนุสัญญาบางอย่าง ที่อนุญาตให้สร้างเมธอดดังกล่าวขึ้นมา เราจะเริ่มต้นชื่อของเมธอดดังกล่าว ด้วยขีดล่าง ในความเป็นจริง เราใช้อนุสัญญาเก่าที่เป็นที่ยอมรับโดยทั่วไป เกี่ยวกับเมธอดส่วนตัว เพียงแต่เราเรียกเมธอดดังกล่าวว่าวิธีการที่ได้รับการป้องกัน เพื่อแสดงว่าพวกมันถูกรับมรดก แต่เราจะไม่ใช้พวกมัน จากภายนอก อย่างไรก็ตาม นี่เป็นวิธีที่พวกมัน ถูกนำมาใช้ตามอนุสัญญาโบราณนั่นเอง

เอาล่ะ มาเขียนคลาสแม่ ด้วยเมธอดที่ได้รับการป้องกัน:

javascriptclass User {
  setName(name) {
    this.name = name;
  }
  getName() {
    return this._capeFirst(this.name);
  }
  
  _capeFirst(str) {
    return str[0].toUpperCase() + str.slice(1);
  }
}

มาใช้เมธอดที่ได้รับการป้องกันนี้ ในคลาสลูก:

javascriptclass Student extends User {
  setSurn(surn) {
    this.surn = surn;
  }
  getSurn() {
    return this._capeFirst(this.surn);
  }
}
Задание 1

ในโค้ดต่อไปนี้ ทำให้เมธอดตัวช่วย เป็นวิธีการที่ได้รับการป้องกัน:

javascriptclass 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;
  }
}