Skip to main content

Наследование классов

Наследование классов – это способ расширения одного класса другим классом. Таким образом, мы можем добавить новый функционал к уже существующему.

  1. Чтобы унаследовать от класса: class Child extends Parent: -При этом Child.prototype.proto будет равен Parent.prototype, так что методы будут унаследованы.
  2. При переопределении конструктора:
    • Обязателен вызов конструктора родителя super() в конструкторе Child до обращения к this.
  3. При переопределении другого метода:
    • Мы можем вызвать super.method() в методе Child для обращения к методу родителя Parent.
  4. Внутренние детали:
    • Методы запоминают свой объект во внутреннем свойстве [[HomeObject]]. Благодаря этому работает super, он в его прототипе ищет родительские методы.
    • Поэтому копировать метод, использующий super, между разными объектами небезопасно.
  • У стрелочных функций нет своего this и super, поэтому они «прозрачно» встраиваются во внешний контекст.

Ключевое слово «extends»

Синтаксис создания класса допускает указывать после extends не только класс, но и любое выражение. Пример вызова функции, которая генерирует родительский класс:

function f(phrase) {
return class {
sayHi() { alert(phrase); }
};
}
class User extends f("Привет") {}
new User().sayHi(); // Привет

Здесь class User наследует от результата вызова f("Привет").

Переопределение методов

class Rabbit extends Animal {
stop() {
// ...теперь это будет использоваться для rabbit.stop()
// вместо stop() из класса Animal
}
}

У классов есть ключевое слово "super", чтобы сделать новый на его основе, изменяя или расширяя его функциональность

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

🚀 Источник: https://learn.javascript.ru/class-inheritance