Защищенные методы в ООП в JavaScript

Приватные методы не наследуются и не видны снаружи класса. Иногда, однако, нужны методы, которые наследуются, но не видны снаружи класса. Такие методы называются защищенными (protected). JavaScript, к сожалению, не поддерживает таких методов.

Поэтому я предлагаю ввести некоторое соглашение, позволяющее создавать такие методы. Будем начинать имена таких методов через подчеркивание. Фактически мы используем старое общепринятое соглашение о закрытых методах. Toлько называем такие методы защищенными в знак того, что они наследуются, но мы не будем использовать их снаружи. Впрочем, именно так они и применяются по древнему соглашению.

Итак, давайте напишем класс-родитель с защищенным методом:

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