自
document.__proto__.__proto__===Document.prototype
返回true,因为
Document.prototype.hasOwnProperty('body')
也会返回true
有人可以向我解释为什么 document.body 和 Document.prototype.body 不是一回事吗?此外,为什么Chrome开发者工具中的 Document.prototype.body 会导致
Uncaught TypeError: Illegal invocation(…)
(anonymous function) @ VM6098:2
InjectedScript._evaluateOn @ VM3911:904
InjectedScript._evaluateAndWrap @ VM3911:837
InjectedScript.evaluate @ VM3911:693
而 document.body 会导致
<body...>...</body>
答案 0 :(得分:2)
Document.prototype
是document.__proto__
的类型(原型..),但它并不意味着它是同一个对象。通过继承,在其原型链中查找未找到作为对象属性的属性。如果document.body
来自Document.prototype.body
,那么请查看该属性:
console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body'))
&#13;
可以看出,body
属性定义了 getter 方法,并且它不是一个简单的原始值。这已经让我们暗示为什么Document.prototype.body
可能会失败 - 它需要一些实例来操作。
事实上,我们可以使用我们选择的this
来调用此方法,我们的document
实例:
console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body').get.call(document))
&#13;
现在很清楚看到差异是什么以及为什么它的表现不同。