亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

全局上下文中具有 ID 的 HTML 元素

全局上下文中具有 ID 的 HTML 元素

阿晨1998 2023-11-13 10:49:23
如果我聲明一個帶有 ID 的 HTML 元素,我可以通過以下屬性訪問它globalThis:console.log(globalThis.foo) // <div id="foo"></div><div id="foo"></div>...但是如果我這樣做了,Object.getOwnPropertyDescriptor(globalThis, 'foo')我就會得到undefined。為什么?console.log(Object.getOwnPropertyDescriptor(globalThis, 'foo')) // undefined<div id="foo"></div>我能想到的唯一答案是代理是在window.
查看完整描述

1 回答

?
德瑪西亞99

TA貢獻1770條經驗 獲得超3個贊

如果您查看MDN 文檔,getOwnPropertyDescriptor它在第一段中指出,只有直接存在于對象上的屬性才會返回有效的屬性描述符。因此,如果屬性是 a) 在對象原型(或其原型,遞歸)上定義或 b) 在本機代碼中定義,則它不會返回有效的屬性描述符。這最有可能是這種情況globalThis

Object.getOwnPropertyDescriptor() 方法返回給定對象的自有屬性(即直接存在于對象上而不是在對象原型鏈中的屬性描述符)的屬性描述符。

正如 @52d6c6af 在注釋中指出的,具有 ID 的 DOM 元素是在 WindowProperties 對象上定義的,該對象是窗口對象原型鏈的一部分。


console.log(Object.getOwnPropertyDescriptor(window.__proto__.__proto__,?'foo'))
<div?id="foo"></div>

另外,根據經驗。不要使用globalThis或window訪問 DOM 元素。使用getElementById或querySelector.


const foo0 = globalThis.foo;

const foo1 = document.getElementById('foo');

const foo2 = document.querySelector('#foo');


console.log(foo0 === foo1, foo1 === foo2);

<div id="foo"></div>


查看完整回答
反對 回復 2023-11-13
  • 1 回答
  • 0 關注
  • 146 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號