对象是原型链中最高的吗?

时间:2012-12-13 10:19:51

标签: javascript inheritance

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

Object函数(也用作构造函数)。

因为它是一个函数,它的构造函数应该是Function

因此,如果我想将某些属性添加到Object,我可以将其添加到Function.prototype

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

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

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

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

null如何成为__proto__的{​​{1}}?不是Object吗?

2 个答案:

答案 0 :(得分:0)

在阅读完这篇文章后,我认为this中的图表回答了问题。

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

Object.prototype是原型链的 末尾,Object.prototype.constructorObject

Object是一个函数,这意味着,Object.__proto__Function.prototype(因为Object可能已创建为new Function()

不是Object.prototype.__proto__Function.prototype

因此,__proto__链转为Function.prototype - > Object.prototype - > null

我希望我做对了。

答案 1 :(得分:-1)

如果我理解正确,功能和对象将顶部位置保持在一起。因为Function有一个Object作为它的原型,而Object作为构造函数实际上是一个Function。

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

好的是,你通常不必担心它。它应该Just Work™。