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:

javascriptclass User {
  setName(name) {
    this.name = name;
  }
  getName() {
    return this.name;
  }
}

Oletetaan, että jälkeläisluokassa ylikirjoitimme kantaluokan metodin:

javascriptclass 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:

javascriptclass Student extends User {
  setName(name) {
    if (name.length > 0) {
      super.setName(name); // kantaluokan metodi
    } else {
      throw new Error('opiskelijan nimen virhe');
    }
  }
}
Задание 1

Annettu on seuraava koodi:

javascriptclass 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.