簡體   English   中英

document.body vs Document.prototype.body

[英]document.body vs Document.prototype.body

以來

document.__proto__.__proto__===Document.prototype

返回true,因為

Document.prototype.hasOwnProperty('body')

也返回true

有人可以向我解釋為什么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 ..),但它並不意味着它是同一個對象。 通過繼承,在其原型鏈中查找未找到作為對象屬性的屬性。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM