Ülekatstud meetodi kutsumine OOP-s JavaScriptis
Ülekirjutamisel kaotab lapsklass
juurdepääsu ülekatstud vanema
meetodile. Siiski on sellele võimalik
juurde pääseda. Seda tehakse
klausliga super,
mis viitab vanemklassile.
Vaatame näidet, mil võib olla vajalik juurdepääs vanema meetodile. Olgu meil järgmine vanemklass:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Oletame, et me lapseklassis kirjutasime vanema meetodi üle:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Võib märgata, et ülekatstud meetodis, kui tingimus on täidetud, tehakse tegelikult vanema meetodi kood. Tekib tarbetu koodi dubleerimine.
Sellest võib lahti saada, kui kutsuda vanema meetodit. Teeme selle:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // vanema meetod
} else {
throw new Error('student name error');
}
}
}
Antud on järgmine kood:
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');
}
}
}
Klassis Employee parandage
ja lihtsustage vanuse määrajat, kasutades
originaalset vanema meetodit.