为什么我无法在js中设置文档或窗口对象?

问题描述 投票:0回答:1

当我检查并在控制台中写下

window.document = null;
window = null;
。这不会为各个道具分配 null,为什么会出现这种行为?

如果是这样,那么我可以显式禁用任何对象或其属性的设置,而只启用它来获取数据(就像我们在 C# 中的那样 - 仅具有 getter 的属性)

javascript dom window document
1个回答
0
投票

在 JavaScript 中,直接将 null 分配给 window.document 或 window 不会使这些对象无效。浏览器环境中的window对象是代表浏览器窗口的全局对象。它不能以这种方式被取消或重新分配。

您观察到的行为是因为这些对象是全局上下文中的只读属性。您不能直接修改它们或将它们设置为空。尝试这样做不会有任何效果。

如果您想防止修改特定属性或对象,可以使用各种技术:

  1. 使用 Object.freeze():您可以使用 Object.freeze() 使对象不可变,从而防止对其属性进行任何更改。

Object.freeze(window.document);

这将使文档对象变为只读,从而防止对其属性进行任何修改。

  1. 定义只读属性:您可以使用 getter 方法定义只读属性。但是,这适用于您控制的对象,而不是像窗口这样的内置对象。

const obj = {
  _readOnlyProperty: 'value',
  get readOnlyProperty() {
    return this._readOnlyProperty;
  }
};

在此示例中,_readOnlyProperty 是私有属性,readOnlyProperty 是返回其值的只读属性。

  1. Proxy 对象:您可以使用 Proxy 对象来拦截和自定义属性访问等操作。

const readOnlyWindow = new Proxy(window, {
  set(target, prop, value) {
    // Ignore attempts to set properties
    return true; // Indicate success
  }
});

此示例为窗口对象创建一个代理,以防止设置属性。

© www.soinside.com 2019 - 2024. All rights reserved.