Защищенные методы в ООП в 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;
}
}