04. Subclassing
Ключевое слово extends позволяет создать класс на основе уже существующего конструктора.
class Child extends Parent {
constructor(...props) {
super(...props);
}
}На месте extends может стоять любое выражение, возвращающее функцию-конструктор или null.
class Foo extends combine(MyMixin, MySuperClass) {}При наследовании через extends формируется стандартная цепочка прототипов.
let cp = new ColorPoint(25, 8, "green");Особенности наследования:
Наследование одиночное;
Статические методы наследуются;
В ES6 можно выполнять наследование стандартных библиотечных конструкторов, таких как
Array, Error.Закрытые свойства класса можно эмулировать путем обращения из класса к переменным, которые определены в рамках текущего модуля, но недоступны за его пределами.
Prototype Chains
В реальности формируется две цепочки прототипов:
Слева формируется цепочка конструкторов: прототипом дочернего класса является его родительский класс.
Справа формируется цепочка прототипов объектов.

super()
super()Обращение к родительскому классу выполняется при помощи ключевого слова super:
В конструкторе класса
super(...)вызывает конструктор суперкласса. Если конструктор суперкласса не вызван явно, то будет выброшено исключение.В определениях методов
superссылается на прототип из родительского конструктора.
Конструктор класса родителя наследуется автоматически. То есть, если в потомке не указан свой constructor, то используется родительский. Если же у потомка свой constructor, то чтобы в нём вызвать конструктор родителя — используется синтаксис super() с аргументами для родителя.
Вызвать конструктор родителя можно только изнутри конструктора потомка. В частности,
super()нельзя вызвать из произвольного метода.В конструкторе потомка мы обязаны вызвать
super()до обращения кthis. До вызоваsuperне существуетthis, так как по спецификации в этом случае именноsuperинициализируетthis.
Last updated
Was this helpful?