gpt4 book ai didi

javascript - document.body 与 Document.prototype.body

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:15:17 26 4
gpt4 key购买 nike

document.__proto__.__proto__===Document.prototype

返回 true 并且因为

Document.prototype.hasOwnProperty('body')

也返回真

有人能给我解释一下为什么 document.bodyDocument.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.prototypedocument.__proto__ 的类型(prototype..),但不代表是同一个对象。通过继承,在对象的原型(prototype)链中查找未作为对象属性找到的属性。对于 document.body,它来自 Document.prototype.body,所以让我们看一下该属性:

console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body'))

可以看出,body 属性定义了一个getter 方法,它不是一个简单的原始值。这已经给了我们为什么 Document.prototype.body 可能会失败的提示——它需要一些实例来操作。

事实上,我们可以使用我们选择的 this 调用此方法,我们的 document 实例:

console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body').get.call(document))

现在可以很清楚地看出区别是什么以及为什么会有不同的行为。

关于javascript - document.body 与 Document.prototype.body,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32841099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com