Object继承自Function.prototype,而Function.prototype继承自Object.prototype。
这是因为在内部,Object实际上是一个函数
function Object(){[native code]}
这就是我们可以编写像
这样的代码的原因var ob=new Object();
对象继承了像'来电者'等属性。 ,' arity'等来自Function.prototype
然而(这是令人困惑的)
alert(Object.hasOwnProperty('caller')); //returns TRUE ! surprising
不应该返回false,因为Object实际上继承了'来电者'来自Function.prototype的属性?
同样的方式
alert(Function.hasOwnProperty('caller'));
/*returns True. expected 'false' as Function object has no property of its own and inherits everything from Function.prototype*/
alert(Number.hasOwnProperty('caller')); //again returns true, unexpectedly
所以,有人知道为什么会这样吗?
非常感谢你。我希望我听起来不天真编辑
尝试Object.getOwnPropertyNames(Object)
确实将'caller'
作为属性直接返回到Object本身。
所以Object.hasOwnProperty('caller')
事实上是正确的
但是,现在问题是为什么在MDN文档中,'caller'
被提及为从Function继承而来。
所以它肯定会导致混乱。
这是文档中的一些错误吗? 谢谢。
修改-2
我能否得出Object有自己的
的结论 caller
,length
等属性
甚至是
Object.length
和Object.__proto__.length
不一样。如果Object确实从[[prototype]]
继承了length属性,那就应该是平等的,即Function.prototype
但事实并非如此
这就是为什么MDN提到Object只从其caller
对象继承length
,arity
,[[prototype]]
等?它有点误导恕我直言