Извикване на предефиниран метод в ООП в JavaScript

При предефиниране потомкът губи достъп до предефинирания метод на родителя. Въпреки това, все пак е възможно да се получи достъп до него. Това се прави с помощта на ключовата дума super, която сочи към родителския клас.

Нека разгледаме пример, когато може да се нуждаем от достъп към родителския метод. Да предположим, че имаме следния родителски клас:

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

Да предположим, че в класа-потомък сме предефинирали метода на родителя:

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

Може да се забележи, че в предефинирания метод при изпълнение на условието фактически се изпълнява кодът на родителския метод. Получава се ненужно дублиране на кода.

Може да се отървем от него, ако извикаме метода на родителя. Нека направим това:

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

Даден е следният код:

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

В класа Employee коригирайте (опростете) сетъра за възраст, като използвате оригиналния метод на родителя.