当我检查并在控制台中写下
window.document = null;
或 window = null;
。这不会为各个道具分配 null,为什么会出现这种行为?
如果是这样,那么我可以显式禁用任何对象或其属性的设置,而只启用它来获取数据(就像我们在 C# 中的那样 - 仅具有 getter 的属性)
在 JavaScript 中,直接将 null 分配给 window.document 或 window 不会使这些对象无效。浏览器环境中的window对象是代表浏览器窗口的全局对象。它不能以这种方式被取消或重新分配。
您观察到的行为是因为这些对象是全局上下文中的只读属性。您不能直接修改它们或将它们设置为空。尝试这样做不会有任何效果。
如果您想防止修改特定属性或对象,可以使用各种技术:
Object.freeze(window.document);
这将使文档对象变为只读,从而防止对其属性进行任何修改。
const obj = {
_readOnlyProperty: 'value',
get readOnlyProperty() {
return this._readOnlyProperty;
}
};
在此示例中,_readOnlyProperty 是私有属性,readOnlyProperty 是返回其值的只读属性。
const readOnlyWindow = new Proxy(window, {
set(target, prop, value) {
// Ignore attempts to set properties
return true; // Indicate success
}
});
此示例为窗口对象创建一个代理,以防止设置属性。