[英]document.body vs Document.prototype.body
以來
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
可能會失敗 - 它需要一些實例來操作。
事實上,我們可以調用此方法具有this
我們的選擇,我們的document
實例:
console.log(Object.getOwnPropertyDescriptor(Document.prototype, 'body').get.call(document))
現在很清楚地看到差異是什么以及它為什么表現不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.