04. Subclassing
Ключевое слово extends
позволяет создать класс на основе уже существующего конструктора.
На месте extends
может стоять любое выражение, возвращающее функцию-конструктор или null
.
При наследовании через extends
формируется стандартная цепочка прототипов.
Особенности наследования:
Наследование одиночное;
Статические методы наследуются;
В 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?