1

__proto__属性指的是对象的实际原型。)

Object是一个函数(也用作构造函数)。

既然是函数,那么它的构造函数应该是Function.

所以,如果我想将一些属性添加到Object,我可以将它添加到Function.prototype.

但是,是一个对象,所有对象都以某种方式Function继承。Object

这实际上是一个循环关系吗?

我在 MDN 页面上读到了这个:

(some function) ---> Function.prototype ---> Object.prototype ---> null

怎么可能null呢?不是又来了吗?__proto__ObjectFunction.prototype

4

2 回答 2

0

在阅读了这个之后,我认为这个答案中的图表回答了这个问题。

Javascript 中的每个对象都有一个__proto__与构造函数的原型属性相同的属性。因此,如果找不到对象的属性,它会在它的__proto__属性中查找它,然后向上查找,直到找到它或到达null

Object.prototype是原型链末端,Object.prototype.constructor存在Object

这是一个函数的事实Object意味着,Object.__proto__Function.prototype(因为Object可以被创建为new Function()

不是Object.prototype.__proto__这样Function.prototype

所以,__proto__链去Function.prototype--> Object.prototype-->null

我希望我做对了。

于 2012-12-25T16:57:07.343 回答
-1

如果我理解正确,Function 和 Object 将最高位置放在一起。由于 Function 有一个 Object 作为它的原型,而 Object 作为一个构造函数,实际上是一个 Function。

这种相互依赖/继承在完全 OO 语言中很常见,并且比这个(相当简单的)两项版本要复杂得多。看看Ruby 的继承图(在美丽的 ascii 艺术中!)看看它是多么令人头疼:)

好消息是,您通常不必担心它。它应该只是工作™。

于 2012-12-13T10:49:52.750 回答