Object.__proto__ - посилання на внутрішній прототип об'єкта.
object.__proto__
object - об'єкт якому потрібно задати прототип.
__proto__ властивість об'єкта яка містить посилання на prototype. Об'єкт або функція успадковують всі методи і властивості нового прототипу разом з усіма методами і властивостями в ланцюжку прототипів нового прототипу.Об'єкт може мати тільки один прототип (не включаючи успадковані прототипи в ланцюжку прототипів).
Використання властивості __proto__ викликає суперечки і багатьох воно розчарувало. Раніше вона ніколи не включалася в специфікацію EcmaScript, але сучасні браузери все одно вирішили його реалізувати.
Сьогодні властивість __proto__ стандартизовано в специфікації ECMAScript 6 і буде підтримуватися в майбутньому. Проте, зміна прототипу об'єкта все ще залишається повільної операцією, яку слід уникати, якщо ви турбуєтеся про продуктивність.
Властивість __proto__ також може використовуватися при визначенні літерала об'єкта, встановлюючи прототип об'єкта при його створенні. Цей спосіб може розглядатися як альтернатива методу Object.create().
var noProto = Object.create( null);
noProto.__proto__ = 17 ;
alert(noProto.__proto__ ); // 17
//функція яка використовується як конструктор
function Employee () {/ * инициализируем екземпляр * /}
// Створюємо новий екземпляр Employee
var fred = new Employee ();
// Перевірка на еквівалентність
alert(fred.__proto__ === Employee.prototype); // true
Наслідування об'єкту за допомогою __proto__ :
var ob1={a:1,b:2};
var ob2={};
ob2.__proto__=ob1; //наслідуємо ob1
ob2.x=5;
alert(ob2.a);