在浏览器中,为对象分配一个新值"window"不起作用?



在浏览器中,我尝试评估以下片段:

window = 1; console.log(window)

控制台中打印的值仍然是原始窗口对象,而不是编号1

有人知道为什么不能重新分配window对象吗?这是Javascript语言的一个特性吗?我能让我自己的对象也像窗口对象一样不可写吗?

它不能被覆盖,因为它被定义为不可写。

这是JS的一个特性(尽管window对象可能是在较低级别实现的)。

var example = {};
Object.defineProperty(example, "foo", {
  value: "Hello",
  writable: false
});
document.body.appendChild(document.createTextNode(example.foo));
example.foo = "World";
document.body.appendChild(document.createTextNode(example.foo));

规范中说:

windowframesself IDL属性都必须返回Window对象的浏览上下文的WindowProxy对象。

这里的"must"意味着无论您做什么,对window的每个请求都将导致WindowProxy对象。

相关内容

最新更新