定义`prototype`属性的地方

时间:2014-06-13 14:20:26

标签: javascript prototype prototypal-inheritance

好吧,我一直认为原型属性存在于所有对象中。但在一次面试之后,我回到家并打开镀铬控制台

window.prototype
**undefined**

WTF?

Object.prototype
**Object {}**

var a = {};
a.prototype
**undefined**

var a = function(){}
a.prototype
**Object {}**

我已多次阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype,但仍不清楚。有人可以解释一下吗?

感谢名单

P.S。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype

  

JavaScript中的所有对象都来自Object;所有物体   从Object.prototype继承方法和属性,尽管它们   可以被覆盖(除了具有空原型的Object,即   的Object.create(空)

window是Object,因此它必须具有原型属性

1 个答案:

答案 0 :(得分:7)

实例继承的对象(其原型)存储在内部属性[[Prototype]]中。可以使用Object.getPrototypeOf()(在ES5兼容的引擎中)检索其值。

console.log(Object.getPrototypeOf(window));
// Window { ... }

var a = {};
console.log(Object.getPrototypeOf(a));
// Object { ... }

只有function明确拥有prototype property

console.log(typeof Object);
// 'function'

并且prototype的值仅用于在创建[[Prototype]]实例时设置实例new的值。

function Foo() {}
var bar = new Foo();

console.log(Foo.prototype === Object.getPrototypeOf(bar)); // true