这篇翻译不完整。请帮忙从英语翻译这篇文章

摘要

window对象的 window 属性执行其本身。因此下面的表达式都返回同样的window对象。

window.window
window.window.window
window.window.window.window
  ...

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

  1. 脚本中的全局变量实际上是window对象的属性:
    var global = {data: 0};
    alert(global === window.global); // displays "true"
    
  2. 不用写 window. 前缀就可以访问window对象的内置属性:
    setTimeout("alert('Hi!')", 50); // equivalent to using window.setTimeout.
    alert(window === window.window); // displays "true"
    

将 window 属性执行该对象本身的目的可能是为了更容易引用全局对象。否则,你得在脚本开头手动赋值:var window = this; 。

另外一个原因就是如果没有这个属性,你就不能这样写:  window.open('http://google.com/'),你只能这样写: open('http://google.com/')

使用该属性还有一个原因,有些库,尤其是JavaScript模块希望能够提供OOP版本和非OOP版本。例如,如果我们引用了 this.window.location.href ,JavaScript 模块就可以在它定义的类里面定义一个 window 属性(因为默认没有全局性的 window 变量存在),这个属性可以在将window对象传进这个模块的类的构造器之后被创建。这样,这个类的方法中的 this.window 就指向了window对象。在没有命名空间的版本中,this.window 会重新指向window对象,从而也可以很容易获取到文档的位置。还有一个优点,这个类(即使这个类定义在模块外面)的对象可以随意地改变对window的引用,而如果有一个写死了的window的引用就做不到这样。类内部的默认值仍然可以设置成当前的window对象。

规范

规范 状态 说明
HTML Living Standard
Window.window
Living Standard 和最新版 HTML 5.1一致
HTML 5.1
Window.window
Recommendation HTML5一致
HTML5
Window.window
Recommendation 第一个包含 Window.window 定义的快照

文档标签和贡献者

 此页面的贡献者: ScottZhou
 最后编辑者: ScottZhou,