Pozivanje redefinisanog metoda u OOP-u u JavaScript-u

Prilikom redefinisanja, naslednik gubi pristup redefinisanom metodu roditelja. Međutim, i dalje je moguće doći do njega. Ovo se radi pomoću ključne reči super, koja ukazuje na roditeljsku klasu.

Hajde da pogledamo primer, kada nam može zatrebati pristup roditeljskom metodu. Neka postoji sledeća roditeljska klasa:

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

Neka smo u klasi-nasledniku redefinisali metod roditelja:

javascriptclass Student extends User {
  setName(name) {
    if (name.length > 0) {
      this.name = name;
    } else {
      throw new Error('student name error');
    }
  }
}

Može se primetiti da se u redefinisanom metodu pri ispunjenju uslova zapravo izvršava kod roditeljskog metoda. Dolazi do nepotrebnog dupliranja koda.

Od toga se može osloboditi, ako se pozove metod roditelja. Hajde da to uradimo:

javascriptclass Student extends User {
  setName(name) {
    if (name.length > 0) {
      super.setName(name); // metod roditelja
    } else {
      throw new Error('student name error');
    }
  }
}
Задание 1

Dat je sledeći kod:

javascriptclass 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');
    }
  }
}

U klasi Employee ispravite pojednostavite setter za godine, koristeći originalni metod roditelja.