Проблема путаницы заключается в том, что слово prototype
имеет два значения.
1. Функциональное свойство. Любая функция может иметь свойство prototype
, которое является объектом. В вашем случае
Test.prototype = {
sayHello: function() {}
}
Свойство этого объект становятся наследственными свойствами и методами объектов, построенных с помощью этого конструктора функции:
var z = new Test();
Теперь z
имеет свойство метода sayHello
, который вы настроили с помощью объект Test.prototype
.
2. Экземпляр экземпляра. Объект экземпляра, в вашем случае z
, имеет внутренний ссылка на прототип объекта из пункта № 1 выше. Эта ссылка используется внутренне для разрешения свойств и методов в цепочке прототипов. Однако эта ссылка не является, предположительно доступной напрямую, и вы не можете получить доступ к этой ссылке с помощью свойства prototype
объекта.
В chrome и Firefox вы можете использовать свойство __proto__
, но его использование устарело.
Чтобы получить прототип, который был использован при строительстве объекта следует использовать Object.getPrototypeOf
:
Object.getPrototypeOf(z) === Test.prototype; // true
Потому что вы не можете получить прототип объекта, как это, нет такого свойства, потому что прототип не подвергается, как недвижимость. Вы можете получить его с помощью метода Object.getPrototypeOf. Например: 'Object.getPrototypeOf (z) === Test.prototype'. – dfsq
@dfsq Вы не должны отвечать в комментариях. –