Object.getPrototypeOf(Object)和Object.prototype有什么区别?

时间:2014-10-08 15:02:24

标签: javascript

>Object.getPrototypeOf(Object)
[Function: Empty]

>Object.prototype
{}

为什么我得到了不同的结果?但如果我使用:

>Object.getPrototypeOf({})
{}
一切都很好。我错过了关于getPrototypeOf的任何一点吗?

3 个答案:

答案 0 :(得分:4)

Object.prototype是所有其他对象继承的对象。对于内置对象,它位于prototype chain root 。来自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

答案 1 :(得分: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

尽管Object.prototype和Function.prototype不同,但对象和函数的行为与getPrototypeOf相同。 函数的内部[[prototype]] =其属性,但Object的内部[[prototype]]不是它的属性。

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

是的确,Object是一个函数,Array也是如此,Function也是如此。所有都是'功能'。我们不应该说"对象是一流的功能"? (而不是反向?只是开玩笑)

答案 2 :(得分:0)

我知道这是旧的,但我刚刚浏览了这个,我没有在任何地方找到完整的图片。假设您正在创建一个自定义构造函数 Foo,它是这样的:

JS proto diagram

注意 Object.__proto__Function.__proto__ 都指向 Function.prototype,因为 ObjectFunction 都是 函数,就像 {{ 1}}。