Volání přepsané metody v OOP v JavaScriptu
Při přepisování metody potomek ztrácí
přístup k přepsané metodě
rodiče. Nicméně, přístup k ní lze
stále získat. To se dělá
pomocí klíčového slova super,
které odkazuje na rodičovskou
třídu.
Podívejme se na příklad, kdy můžeme potřebovat přístup k rodičovské metodě. Předpokládejme, že máme následující rodičovskou třídu:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Předpokládejme, že jsme v třídě-potomkovi přepsali metodu rodiče:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Lze si všimnout, že v přepsané metodě při splnění podmínky je fakticky proveden kód rodičovské metody. Vzniká tak zbytečné duplikování kódu.
Lze se toho zbavit, pokud zavoláme metodu rodiče. Udělejme to:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // metoda rodiče
} else {
throw new Error('student name error');
}
}
}
Následuje 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');
}
}
}
Ve třídě Employee opravte
zjednodušte setter věku, použijte
originální metodu rodiče.