Свойство __proto__ - ссылка на объект, в котором будет искаться свойство, если оно не найдено в текущем объекте.
При чтении свойств у объекта, если нужного свойства нет, то оно ищется в объекте на который указывает __proto__. Следовательно, если нет свойства и в этом объекте, оно будет искаться в его __proto__.
Синтаксис
объект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 (уже не из прототипа);