Наследование Javascript (супер)

#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();