在浏览器中,我尝试评估以下片段:
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));
规范中说:
window
、frames
和self
IDL属性都必须返回Window
对象的浏览上下文的WindowProxy
对象。
这里的"must"意味着无论您做什么,对window
的每个请求都将导致WindowProxy对象。