Ylikirjoitetun metodin kutsuminen OOP:ssa JavaScriptissä
Ylikirjoitettaessa jälkeläinen menettää
ylikirjoitettuun metodiin
kantaluokan. Kuitenkin siihen pääsy
on edelleen mahdollista. Tämä tehdään
avainsanalla super,
joka viittaa kantaluokkaan.
Katsotaanpa esimerkkiä, jolloin saatamme tarvita pääsyn kantaluokan metodiin. Oletetaan, että meillä on seuraava kantaluokka:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Oletetaan, että jälkeläisluokassa ylikirjoitimme kantaluokan metodin:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('opiskelijan nimen virhe');
}
}
}
Voidaan huomata, että ylikirjoitetussa metodissa ehdon täyttyessä käytännössä suoritetaan kantaluokan metodin koodi. Tuloksena on tarpeeton koodin kaksoiskappale.
Siitä voi päästä eroon, jos kutsutaan kantaluokan metodia. Tehdäänpä niin:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // kantaluokan metodi
} else {
throw new Error('opiskelijan nimen virhe');
}
}
}
Annettu on seuraava koodi:
class User {
setAge(age) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('tarvitaan ikä enemmän kuin 0');
}
}
}
class Employee {
setAge(age) {
if (age <= 120) {
if (age >= 0) {
this.age = age;
} else {
throw new Error('tarvitaan ikä enemmän kuin 0');
}
} else {
throw new Error('tarvitaan ikä vähemmän kuin 120');
}
}
}
Luokassa Employee korjaa
(yksinkertaista) ikän asettaja käyttämällä
kantaluokan alkuperäistä metodia.