如果我聲明一個帶有 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>
- 1 回答
- 0 關注
- 146 瀏覽
添加回答
舉報
0/150
提交
取消