(__proto__
属性是指对象的实际原型。)
Object
是函数(也用作构造函数)。
因为它是一个函数,它的构造函数应该是Function
。
因此,如果我想将某些属性添加到Object
,我可以将其添加到Function.prototype
。
但是,Function
是一个对象,所有对象都以某种方式从Object
继承。
这实际上是一种循环关系吗?
我在MDN页面中读到了这个:
(some function) ---> Function.prototype ---> Object.prototype ---> null
null
如何成为__proto__
的{{1}}?不是Object
吗?
答案 0 :(得分:0)
在阅读完这篇文章后,我认为this中的图表回答了问题。
Javascript中的每个对象都有一个__proto__
属性,它与构造函数的prototype属性相同。
因此,如果找不到对象的属性,它会在它的__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
我希望我做对了。
答案 1 :(得分:-1)
如果我理解正确,功能和对象将顶部位置保持在一起。因为Function有一个Object作为它的原型,而Object作为构造函数实际上是一个Function。
这种相互依赖/继承在完全OO语言中很常见,并且可能变得比这个(相当简单的)两项版本复杂得多。看看Ruby's inheritance diagram(美丽的ascii艺术!),看看它是多么令人痛苦:)
好的是,你通常不必担心它。它应该Just Work™。