Расширение класса в JS без конструктора или super () - PullRequest
2 голосов
/ 30 сентября 2019

Я изучаю JS, и мне говорят, что если я хочу расширить класс, мне нужно использовать конструктор и super (). Но когда я экспериментировал, я обнаружил, что могу расширить класс без. Я пытался найти объяснение в Интернете, но не смог его найти. Может кто-нибудь объяснить мне? Спасибо

class Person {
  constructor(name, email, address) {
    this.name = name;
    this.email = email;
    this.adress = address;
  }

}

class Employee extends Person {
  getName() {
    return (
      "Hi!," +
      this.name +
      " who has " +
      this.email +
      " as email and lives in " +
      this.adress
    );
  }
}

const newEmployee = new Employee("Ahmed", "ahmed@test.com", "Beverly Hills");

console.log(newEmployee.getName()); *// Hi!,Ahmed who has ahmed@test.com as email and lives in Beverly Hills*

Ответы [ 3 ]

2 голосов
/ 30 сентября 2019

Согласно документации для конструктора на Конструкторы по умолчанию .

Для производных классов конструктор по умолчанию:

 constructor(...args) {
    super(...args);
 }

, что означает, что в конструкторе по умолчанию уже есть вызов для super вместе с зависимостями по умолчанию его базового класса (...args в вашем случае - name, email, address).

Если вы определите свой собственный конструктор для своего производного класса Employee, вам придется вызвать super() с указанными зависимостями.

Что касается , почему вам нужно звонить в супер, вы можете прочитать больше из другого ответа по loganfsmyth .

2 голосов
/ 30 сентября 2019

Супер метод используется для вызова родительского конструктора. Вы можете использовать его, если вам это нужно (используя логику вашего родительского класса в вашем производном классе), но это не обязательно. Вы можете создать класс без конструктора, но он будет использовать класс по умолчанию

constructor() {}

. Для производного класса, если вы не укажете конструктор, он будет использовать

constructor(...args) {
  super(...args);
}
0 голосов
/ 30 сентября 2019

вам может не понадобиться super (), если вы не добавляете новое свойство в подкласс. но если вам нужно добавить новое свойство в подкласс, вы должны использовать call super ()

...