Абароненыя метады ў ААП у JavaScript

Прыватныя метады не наследуются і не бачныя звонку класа. Часам, аднак, патрэбныя метады, якія наследуются, але не бачныя звонку класа. Такія метады называюцца абароненымі (protected). JavaScript, на жаль, не падтрымлівае такiх метадаў.

Таму я прапаную ўвесці некаторае пагадненне, якое дазваляе ствараць такія метады. Будзем пачынаць імёны такiх метадаў праз падкрэслiванне. Фактычна мы выкарыстоўваем старое агульнапрынятае пагадненне аб закрытых метадах. Toлькі называем такія метады абароненымі у знак таго, што яны наследуются, але мы не будзем выкарыстоўваць iх звонку. Дарэчы, менавіта так яны і ўжываюцца па старажытным пагадненні.

Такім чынам, давайце напiшам клас-бацьку з абароненым метадам:

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

У наступным кодзе зрабiце дапаможны метад абароненым:

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