Volanie prepísanej metódy v OOP v JavaScripte
Pri prepisovaní stráca potomok
prístup k prepísanej metóde
rodiča. Avšak, získať k nej
prístup sa napriek tomu dá. Robí sa to
pomocou kľúčového slova super,
ktoré odkazuje na nadradenú
triedu.
Pozrime sa na príklad, kedy nám môže byť potrebný prístup k rodičovskej metóde. Nech máme nasledujúcu triedu-rodiča:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Nech sme v triede-potomkovi prepísali metódu rodiča:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Možno si všimnúť, že v prepísanej metóde pri splnení podmienky fakticky beží kód rodičovskej metódy. Vzniká tak nepotrebné duplikovanie kódu.
Je sa ho možné zbaviť, ak zavoláme metódu rodiča. Urobme to:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // metóda rodiča
} else {
throw new Error('student name error');
}
}
}
Daný je nasledujúci kód:
class User {
setAge(age) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('need age more 0');
}
}
}
class Employee {
setAge(age) {
if (age <= 120) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('need age more 0');
}
} else {
throw new Error('need age less 120');
}
}
}
V triede Employee opravte
zjednodušte setter veku, použite
pôvodnú metódu rodiča.