Inheritance and the prototype chain
Модель наследования в JavaScript может озадачить опытных разработчиков на высокоуровневых объектно-ориентированных языках (таких, например, как Java или C++), поскольку она динамическая и не включает в себя реализацию понятияclass
(хотя ключевое словоclass,
которое было долгие годы зарезервировано, приобрело практическое значение в стандарте ES2015, однако Class в JavaScript ES>=6 представляет собой лишь "синтаксический сахар" поверх прототипно-ориентированной модели наследования).
В плане наследования JavaScript работает лишь с одной сущностью: объектами. Каждый объект имеет внутреннюю ссылку на другой объект, называемый его прототипом. У объекта-прототипа также есть собственный прототип и так далее до тех пор, пока цепочка не завершится объектом, у которого свойство prototype равноnull
. По определению,null
не имеет прототипа и является завершающим звеном в цепочке прототипов.
Хотя прототипную модель наследования некоторые относят к недостаткам JavaScript, на самом деле она мощнее классической. К примеру, поверх неё можно предельно просто реализовать классическое наследование, а вот попытки совершить обратное непременно вынудят вас попотеть.
Last updated