Свойство __proto__ - ссылка на объект, в котором будет искаться свойство, если оно не найдено в текущем объекте.

При чтении свойств у объекта, если нужного свойства нет, то оно ищется в объекте на который указывает __proto__. Следовательно, если нет свойства и в этом объекте, оно будет искаться в его __proto__.

См. также new, prototype.

Синтаксис

объект1.__proto__ = объект2;

При этом 'объект2' называют прототипом 'объект1'.

Свойство __proto__ поддерживается только современными браузерми (ИЕ 10+). Поэтому его не рекомендуется использовать. Но его пониманиме может помочь разобраться в наследовании и ООП (см. prototype, new).

Примеры

Пример

Посмотрим как работает __proto__:

var obj1 = {
	size: 10
}
var obj2 = {
	speed: 20
}

obj1.__proto__ = obj2;

alert(obj1.size) //10;
alert(obj1.speed) //20;
alert(obj2.speed) //20;

В obj1 есть только свойство size, но при обращении к obj1.speed свойство берется из obj2(через __proto__).

Пример

Но если в объекте есть свойство, то оно не берется из прототипа:

Выведем свойства объекта:

var obj1 = {
	size: 10
}
var obj2 = {
	speed: 20
}
obj1.__proto__ = obj2;

alert(obj1.size) //10
alert(obj1.speed) //20 (из прототипа);

obj1.speed = 30;
alert(obj1.speed) //30 (уже не из прототипа);