Pozivanje redefinisanog metoda u OOP-u u JavaScript-u
Prilikom redefinisanja, naslednik gubi
pristup redefinisanom metodu
roditelja. Međutim, i dalje je moguće
doći do njega. Ovo se radi
pomoću ključne reči super,
koja ukazuje na roditeljsku
klasu.
Hajde da pogledamo primer, kada nam može zatrebati pristup roditeljskom metodu. Neka postoji sledeća roditeljska klasa:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Neka smo u klasi-nasledniku redefinisali metod roditelja:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Može se primetiti da se u redefinisanom metodu pri ispunjenju uslova zapravo izvršava kod roditeljskog metoda. Dolazi do nepotrebnog dupliranja koda.
Od toga se može osloboditi, ako se pozove metod roditelja. Hajde da to uradimo:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // metod roditelja
} else {
throw new Error('student name error');
}
}
}
Dat je sledeći 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');
}
}
}
U klasi Employee ispravite
pojednostavite setter za godine, koristeći
originalni metod roditelja.