Наследование классов
Наследование классов – это способ расширения одного класса другим классом. Таким образом, мы можем добавить новый функционал к уже существующему.
- Чтобы унаследовать от класса: class Child extends Parent: -При этом Child.prototype.proto будет равен Parent.prototype, так что методы будут унаследованы.
- При переопределении конструктора:
- Обязателен вызов конструктора родителя super() в конструкторе Child до обращения к this.
- При переопределении другого метода:
- Мы можем вызвать super.method() в методе Child для обращения к методу родителя Parent.
- Внутренние детали:
- Методы запоминают свой объект во внутреннем свойстве [[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