2014-10-08 57 views
0
>Object.getPrototypeOf(Object) 
[Function: Empty] 

>Object.prototype 
{} 

为什么我得到不同的结果?但如果我使用:Object.getPrototypeOf(Object)和Object.prototype有什么区别?

>Object.getPrototypeOf({}) 
{} 

一切都很好。我错过了关于getPrototypeOf的点吗?

+0

你并没有真正解释你期望的结果,但我试图解释Object.getPrototypeOf(Object)和Object.prototype之间的区别。 – 2014-10-08 15:14:49

回答

3

Object.prototype是所有其他对象从中继承的对象。对于内置对象,位于prototype chain。从MDN文档:

JavaScript中的所有对象都是从Object开始的;所有对象继承的方法和属性从Object.prototype,尽管它们可能被重写[...]

Object.getPrototypeOf是一个方便的方法,以得到特定对象的原型。从MDN文档:

Object.getPrototypeOf()方法返回指定对象的原型(即内部[[Prototype]])。

不同类型的对象可以有不同的原型。

实例:

> Object.getPrototypeOf(Object) === Function.prototype 
true 

Object功能,因此它的原型是Function.prototype

> Object.getPrototypeOf(/foo/) === RegExp.prototype 
true 

/foo/创建正则表达式,因此它的原型是RegExp.prototype

> Object.getPrototypeOf([]) === Array.prototype 
true 

[]创建阵列,其原型为Array.prototype

> Object.getPrototypeOf({}) === Object.prototype 
true 

{}创建一个简单对象,其原型是Object.prototype

0

我有一个类似的问题:为什么?

Object.getPrototypeOf(Object) === Function.prototype; // true 
Object.getPrototypeOf(Object) === Object.prototype;  // false 

虽然:

Object.getPrototypeOf(Function) === Function.prototype); // true 
Object.getPrototypeOf(Function) === Object.prototype); // false 

对象和功能相同的行为WRT getPrototypeOf,虽然Object.prototype中和Function.prototype的是不同的。 Function ===其属性的内部[[prototype]],但Object的内部[[prototype]]不是它的属性。

看起来很奇特(我没有看到其他类似的情况)。

是的确,Object是一个函数,所以是Array等,所以是Function。所有都是'功能'。我们不应该说“物体是一流的功能”吗? (而不是相反?只是开玩笑)

相关问题