Вызов переопределенного метода в ООП в JavaScript
При переопределении потомок теряет
доступ к переопределенному методу
родителя. Однако, получить к нему
доступ все равно можно. Это делается
с помощью ключевого слова super
,
которое указывает на родительский
класс.
Давайте посмотрим на примере, когда нам может понадобится доступ к родительскому методу. Пусть у нас есть следующий класс-родитель:
class User {
setName(name) {
this.name = name;
}
getName() {
return this.name;
}
}
Пусть мы в классе-потомке переопределили метод родителя:
class Student extends User {
setName(name) {
if (name.length > 0) {
this.name = name;
} else {
throw new Error('student name error');
}
}
}
Можно заметить, что в переопределенном методе при выполнения условия фактически выполняется код родительского метода. Получается не нужное дублирование кода.
Можно от него избавиться, если вызвать метод родителя. Давайте сделаем это:
class Student extends User {
setName(name) {
if (name.length > 0) {
super.setName(name); // метод родителя
} else {
throw new Error('student name error');
}
}
}
Дан следующий код:
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');
}
}
}
В классе Employee
исправьте
упростите сеттер возраста, использовав
оригинальный метод родителя.