Window: window 属性
window
属性是一个 Window
对象,它指向窗口对象本身。
因此,以下表达式都返回相同的窗口对象
js
window.window;
window.window.window;
window.window.window.window;
// …
在网页中,window 对象也是一个全局对象。这意味着
- 脚本的全局变量实际上是
window
的属性jsvar global = { data: 0 }; alert(global === window.global); // displays "true"
- 您可以访问 window 对象的内置属性,而无需在前面加上
window.
。jssetTimeout("alert('Hi!')", 50); // equivalent to using window.setTimeout(). alert(window === window.window); // displays "true"
window
属性指向对象本身的原因可能是为了方便引用全局对象。否则,您必须在脚本的顶部手动进行let window = this;
赋值。
另一个原因是,如果没有此属性,您将无法编写例如“window.open('https://google.com/')
”。您必须改为使用open('https://google.com/')
。
使用此属性的另一个原因是,库希望提供面向对象版本和非面向对象版本(尤其是 JavaScript 模块)。例如,如果我们引用“this.window.location.href”,则JavaScript 模块可以在其定义的类中定义一个名为“window”的属性(因为它默认情况下没有全局“window”变量),该属性可以在将窗口对象传递给模块类的构造函数后创建。因此,其函数内部的“this.window”将引用该窗口对象。在非命名空间版本中,“this.window”将引用回“window”,并且还可以轻松获取文档位置。另一个优点是,此类类的对象(即使类是在模块外部定义的)也可以随意更改其对窗口的引用,如果它们对“window”进行了硬编码引用,则它们将无法做到这一点。类中的默认值仍然可以设置为当前窗口对象。
规范
规范 |
---|
HTML 标准 # dom-window-dev |
浏览器兼容性
BCD 表格仅在浏览器中加载