Beschermde methoden in OOP in JavaScript
Privé methoden worden niet geërfd en zijn niet zichtbaar van buiten de klas. Soms zijn er echter methoden nodig, die worden geërfd, maar niet zichtbaar zijn van buiten de klas. Dergelijke methoden worden beschermd (protected) genoemd. JavaScript ondersteunt helaas geen dergelijke methoden.
Daarom stel ik voor om een bepaalde afspraak in te voeren, waarmee dergelijke methoden kunnen worden gemaakt. Laten we de namen van dergelijke methoden laten beginnen met een underscore. Feitelijk gebruiken we de oude algemeen aanvaarde afspraak over privé methoden. Alleen noemen we zulke methoden beschermd als teken dat ze worden geërfd, maar we zullen ze niet gebruiken van buitenaf. Overigens, zo worden ze al volgens de oude afspraak toegepast.
Laten we dus een ouderklasse schrijven met een beschermde methode:
class User {
setName(name) {
this.name = name;
}
getName() {
return this._capeFirst(this.name);
}
_capeFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
Laten we deze beschermde methode gebruiken in een subklasse:
class Student extends User {
setSurn(surn) {
this.surn = surn;
}
getSurn() {
return this._capeFirst(this.surn);
}
}
Maak in de volgende code de helpermethode beschermd:
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;
}
}