Window: window 属性

window 属性是一个 Window 对象,它指向窗口对象本身。

因此,以下表达式都返回相同的窗口对象

js
window.window;
window.window.window;
window.window.window.window;
// …

在网页中,window 对象也是一个全局对象。这意味着

  1. 脚本的全局变量实际上是window的属性
    js
    var global = { data: 0 };
    alert(global === window.global); // displays "true"
    
  2. 您可以访问 window 对象的内置属性,而无需在前面加上window.
    js
    setTimeout("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 表格仅在浏览器中加载