Beskyttede metoder i OOP i JavaScript
Private metoder nedarves ikke og er ikke synlige uden for klassen. Sommetider er der dog brug for metoder, der nedarves, men ikke er synlige uden for klassen. Sådanne metoder kaldes beskyttede (protected). JavaScript understøtter desværre ikke sådanne metoder.
Derfor foreslår jeg at indføre en vis konvention, der gør det muligt at oprette sådanne metoder. Lad os starte navnene på sådanne metoder med en understregning. Faktisk bruger vi den gamle almindeligt accepterede konvention for private metoder. Bare vi kalder sådanne metoder beskyttede som tegn på, at de nedarves, men vi vil ikke bruge dem uden for. Det er i øvrigt præcis sådan, de anvendes efter den gamle konvention.
Så lad os skrive en forældreklasse med en beskyttet metode:
class User {
setName(name) {
this.name = name;
}
getName() {
return this._capeFirst(this.name);
}
_capeFirst(str) {
return str[0].toUpperCase() + str.slice(1);
}
}
Lad os bruge denne beskyttede metode i en underklasse:
class Student extends User {
setSurn(surn) {
this.surn = surn;
}
getSurn() {
return this._capeFirst(this.surn);
}
}
Gør den hjælpende metode til en beskyttet en i følgende kode:
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;
}
}