[[prototype]]
Объекты в JavaScript имеют внутреннее свойство, обозначенное в спецификации как [[Prototype]]
, которое является всего лишь ссылкой на другой объект. Почти у всех объектов при создании это свойство получает не-null
значение.
Объекты в JavaScript можно организовать в цепочки так, чтобы свойство, не найденное в одном объекте, автоматически искалось бы в другом. Связующим звеном выступает специальное свойство [[Prototype]]
Каждый объект в языке JavaScript имеет второй объект (или null, но значительно реже), ассоциированный с ним. Этот второй объект называется прототипом, и первый объект наследует от прототипа его свойства.
Пример:
var myObject = {
a: 2
};
myObject.a; // 2
Стандартная операция [[Get]]
(которая вызывается когда вы ссылаетесь на свойство объекта) сначала проверяет, есть ли у объекта собственное свойство a
, если да, то оно используется.
Если стандартная операция [[Get]]
не может найти запрашиваемое свойство в самом объекте, то она следует по ссылке [[Prototype]]
этого объекта:
var anotherObject = {
a: 2
};
// создаем объект, привязанный к `anotherObject`
var myObject = Object.create( anotherObject );
myObject.a; // 2
Если быa
не нашлось и в объектеanotherObject
, то теперь уже его цепочка[[Prototype]]
использовалась бы для дальнейшего поиска.
Этот процесс продолжается до тех пор, пока либо не будет найдено свойство с совпадающим именем, либо не закончится цепочка[[Prototype]]
. Если по достижении конца цепочки искомое свойство так и не будет найдено, операция[[Get]]
вернетundefined
.