2015-09-29 44 views
4

由於document.body的VS Document.prototype.body

document.__proto__.__proto__===Document.prototype 

返回true,因爲

Document.prototype.hasOwnProperty('body') 

也返回true

可能有人向我解釋爲什麼document.body的Document.prototype.body是不是一回事?此外,爲什麼Document.prototype.body內Chrome開發者工具的結果

Uncaught TypeError: Illegal invocation(…) 
(anonymous function) @ VM6098:2 
InjectedScript._evaluateOn @ VM3911:904 
InjectedScript._evaluateAndWrap @ VM3911:837 
InjectedScript.evaluate @ VM3911:693 

document.body的結果

<body...>...</body> 

回答

2

Document.prototype是類型(原型.. )的document.__proto__,但這並不意味着它是同一個對象。通過繼承,在原型鏈中查找不作爲對象屬性的屬性。在document.body的情況下,來自Document.prototype.body,所以讓我們看看屬性:

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

可以看出,該body酒店有吸氣定義方法,並且它不是簡單的原始值。這已經給我們提示了爲什麼Document.prototype.body可能會失敗 - 它需要一些實例來操作。

事實上,我們可以調用此方法具有this我們的選擇,我們的document例如:

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

而現在很明顯看出區別是什麼,爲什麼它的行爲不同。

相關問題