#javascript #inheritance #frontend #super
#javascript #наследование #интерфейс #супер
Вопрос:
Я просматривал документацию по наследованию JS, и меня приветствовала новая «функция» (для меня), называемая super, ключевое super
слово . Ну, из того, что я могу понять, если у меня есть родительский класс, вызываемый, например hospitalStaff
, с аргументом name и staff number, и вызывается унаследованный класс nurse
, в котором также есть имя аргумента, но также и другие аргументы. Итак, в этом примере я бы просто использовал super(name);
, не так ли?
Спасибо за помощь!! Хорошего дня и удачного кодирования!
Комментарии:
1.
super
используется для вызова конструктора родительского класса2. ну, вам понадобится имя и номер сотрудника, если это то, что нужно родительскому классу (на вашем собственном примере)
Ответ №1:
Да, вы бы передали параметры super
функции. Вызывая super
Nurse
конструктор, вы вызываете конструктор в HospitalStaff
и передаете с ними параметры.
В приведенном ниже примере Nurse
класс также имеет sayName
метод. Все методы (включая конструктор) наследуются от родительского класса.
Но если ваш Nurse
конструктор отличается от конструктора из HospitalStaff
, вам нужно создать новый конструктор, который также вызывает конструктор родительского элемента с помощью super
. Без вызова super
вы бы просто перезаписали дочерний конструктор. Попробуйте, это все равно сработает. Но у вас не будет свойств name
and staffNumber
.
То же самое касается методов, которые вы можете использовать super
для вызова методов из родительского. Таким образом, вы можете перезаписать дочерний метод, но при этом сохранить родительскую реализацию этого метода.
class HospitalStaff {
constructor(name, staffNumber) {
this.name = name;
this.staffNumber = staffNumber;
}
sayName() {
console.log(`Name: ${this.name}`);
console.log(`Number: ${this.staffNumber}`);
}
}
class Nurse extends HospitalStaff {
constructor(name, staffNumber, field) {
super(name, staffNumber); // Sets name and staffNumber properties
this.field = field; // Adds a field property
}
sayName() {
super.sayName();
console.log(`Field: ${this.field}`);
}
}
const bob = new HospitalStaff('bob', 43);
bob.sayName();
const julie = new Nurse('Julie', 120, 'pediatrics');
julie.sayName();