Chráněné metody v OOP v JavaScriptu
Privátní metody nejsou děděny a nejsou viditelné zvenčí třídy. Někdy jsou však potřeba metody, které jsou děděny, ale nejsou viditelné zvenčí třídy. Takové metody se nazývají chráněné (protected). JavaScript, bohužel, takové metody nepodporuje.
Proto navrhuji zavést určitou konvenci, která umožňuje takové metody vytvářet. Budeme začínat jména takových metod podtržítkem. V podstatě použijeme starou obecně přijímanou konvenci o privátních metodách. Pouze takové metody nazveme chráněnými na znamení toho, že jsou děděny, ale nebudeme je používat zvenčí. Mimochodem, přesně tak se používají podle staré konvence.
Takže, napišme rodičovskou třídu s chráněnou metodou:
class User {
setName(name) {
this.name = name;
}
getName() {
return this._capeFirst(this.name);
}
_capeFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
Použijme tuto chráněnou metodu v potomkovské třídě:
class Student extends User {
setSurn(surn) {
this.surn = surn;
}
getSurn() {
return this._capeFirst(this.surn);
}
}
V následujícím kódu udělejte pomocnou metodu chráněnou:
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;
}
}