Perrašyto metodo iškvietimas OOP JavaScripte
Perrašant metodą, išvestinė klasė praranda
prieigą prie tėvinės klasės perrašyto metodo.
Tačiau vis tiek galima gauti prieigą prie jo.
Tai daroma naudojant raktinį žodį super,
kuris nurodo į tėvinę klasę.
Pažiūrėkime pavyzdžiu, kada mums gali prireikti prieigos prie tėvinio metodo. Tarkime, turime šią tėvinę klasę:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Tarkime, mes išvestinėje klasėje perrašėme tėvinį metodą:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('studentų vardo klaida');
}
}
}
Galima pastebėti, kad perrašytame metode, kai sąlyga yra tenkinama, faktiškai vykdomas tėvinio metodo kodas. Pasirodo, nereikalingas kodo dubliavimas.
Galima jo atsikratyti, jei iškviestume tėvinį metodą. Padarykime tai:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // tėvinis metodas
} else {
throw new Error('studentų vardo klaida');
}
}
}
Pateiktas toks kodas:
class User {
setAge(age) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('reikia amžiaus daugiau nei 0');
}
}
}
class Employee {
setAge(age) {
if (age <= 120) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('reikia amžiaus daugiau nei 0');
}
} else {
throw new Error('reikia amžiaus mažiau nei 120');
}
}
}
Klasėje Employee pataisykite
amžiaus setterį, supaprastindami jį naudodami
originalų tėvinį metodą.