Pozivanje predefinisanog metoda u OOP-u u JavaScript-u
Prilikom redefinisanja, potomak gubi
pristup predefinisanom metodu
roditelja. Međutim, i dalje je moguće
doći do njega. To se radi
pomoću ključne reči super,
koja ukazuje na roditeljsku
klasu.
Pogledajmo na primeru 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-potomku redefinisali metod roditelja:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('greška u imenu studenta');
}
}
}
Može se primetiti da u redefinisanom metodu prilikom ispunjenja uslova zapravo izvršava kod roditeljskog metoda. Ispostavlja se nepotrebno dupliranje koda.
Može se od toga 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('greška u imenu studenta');
}
}
}
Dat je sledeći kod:
class User {
setAge(age) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('potrebna starost veća od 0');
}
}
}
class Employee {
setAge(age) {
if (age <= 120) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('potrebna starost veća od 0');
}
} else {
throw new Error('potrebna starost manja od 120');
}
}
}
U klasi Employee ispravite
pojednostavite seter za starost, koristeći
originalni metod roditelja.