Мне интересно, что именно за fooInst.prototype.
Это undefined
.
fooInst.prototype === undefined; // true
Только функции имеют автоматическое свойство .prototype
.Объекты этого не делают.
Если вы создаете объект с помощью конструктора, например:
var fooInst = new Foo('test');
... тогда fooInst
будет иметь внутреннюю ссылку на Foo.prototype
, но нет стандартное свойство для получения Foo.prototype
из fooInst
.
Тем не менее, существует нестандартное свойство, которое поддерживается в некоторые среды JavaScript для ссылки на объект-прототип.
fooInst.__proto__ === Foo.prototype; // true (if __proto__ supported)
Также существует метод , предоставляемый ECMAScript 5 , который можно использовать.
Object.getPrototypeOf( fooInst ) === Foo.prototype; // true
Эта внутренняя ссылка от объекта на его объект-прототип может быть только первой в цепочке таких ссылок.
Объект-прототип, скорее всего, имеет свой собственный объект-прототип, на который есть ссылка. (В основных случаях это будет Object.prototype
, или с более длинными цепями, Object.prototype
может быть дальше по цепочке.)
Object.prototype
сама ссылается на null
какпрототип.Это завершает цепочку.
Следует отметить, что внутренняя ссылка от объекта на его объект-прототип не изменится, если вы измените объект .prototype
функции конструктора.Это ссылка, которая существует для жизни объекта.
var Foo = function(s) {
this._bar = s;
};
var fooInst = new Foo('test');
Object.getPrototypeOf( fooInst ) === Foo.prototype; // true
// Change the prototype object of Foo
Foo.prototype = { some:'object' };
Object.getPrototypeOf( fooInst ) === Foo.prototype; // false