以来
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>
最佳答案 Document.prototype是document .__ proto__的类型(prototype ..),但它并不意味着它是同一个对象.通过继承,在其原型链中查找未找到作为对象属性的属性.在document.body的情况下,它来自Document.prototype.body,所以让我们看一下该属性:
console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body'))
可以看出,body属性定义了一个getter方法,它不是一个简单的原始值.这已经让我们暗示为什么Document.prototype.body可能会失败 – 它需要一些实例来操作.
事实上,我们可以使用我们选择的文档实例来调用此方法:
console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body').get.call(document))
现在很清楚地看到差异是什么以及它为什么表现不同.