Wywołanie nadpisanej metody w OOP w JavaScript
Przy nadpisywaniu klasa potomna traci
dostęp do nadpisanej metody
rodzica. Jednakże, dostęp do niej
można nadal uzyskać. Robi się to
za pomocą słowa kluczowego super,
które wskazuje na klasę rodzica.
Spójrzmy na przykład, kiedy może nam być potrzebny dostęp do metody rodzica. Załóżmy, że mamy następującą klasę-rodzica:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Załóżmy, że w klasie-potomnej nadpisaliśmy metodę rodzica:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Można zauważyć, że w nadpisanej metodzie przy spełnieniu warunku faktycznie wykonywany jest kod metody rodzica. Wynika z tego niepotrzebne powielanie kodu.
Można się go pozbyć, jeśli wywoła się metodę rodzica. Zróbmy to:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // metoda rodzica
} else {
throw new Error('student name error');
}
}
}
Dany jest następujący kod:
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');
}
}
}
W klasie Employee popraw,
uprość setter wieku, wykorzystując
oryginalną metodę rodzica.