Chronione metody w OOP w JavaScript
Prywatne metody nie są dziedziczone i nie są widoczne na zewnątrz klasy. Czasami jednak potrzebne są metody, które są dziedziczone, ale nie są widoczne na zewnątrz klasy. Takie metody nazywane są chronionymi (protected). JavaScript, niestety, nie obsługuje takich metod.
Dlatego proponuję wprowadzić pewną konwencję, pozwalającą tworzyć takie metody. Będziemy zaczynać nazwy takich metod od podkreślenia. Faktycznie wykorzystujemy starą powszechnie przyjętą konwencję o metodach prywatnych. Tylko nazywamy takie metody chronionymi na znak, że są dziedziczone, ale nie będziemy ich używać na zewnątrz. Zresztą, właśnie tak stosuje się je według dawnej konwencji.
A więc, napiszmy klasę nadrzędną z chronioną metodą:
class User {
setName(name) {
this.name = name;
}
getName() {
return this._capeFirst(this.name);
}
_capeFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
Wykorzystajmy tę chronioną metodę w klasie potomnej:
class Student extends User {
setSurn(surn) {
this.surn = surn;
}
getSurn() {
return this._capeFirst(this.surn);
}
}
W poniższym kodzie zrób metodę pomocniczą chronioną:
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;
}
}