如果我声明一个带有 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 关注
- 89 浏览
添加回答
举报
0/150
提交
取消