window属性:window
window属性
window窗口对象的window属性指向窗口对象本身。因此,以下表达式都返回相同的窗口对象:
window.window
window.window.window
window.window.window.window
...
在网页中,窗口对象也是全局对象。即:
- 脚本的全局变量实际上是window的属性:
var global = {data: 0}; alert(global === window.global); // displays "true"
- 您可以访问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/')”来代替。
使用此属性的另一个原因是希望提供OOP版本和非OOP版本(尤其是JavaScript模块)的库。例如,如果我们引用“this.window.location.href”,一个JavaScript模块可以在它定义的类中定义一个名为“window”的属性(因为默认情况下不存在全局“window”变量),这可以在将一个窗口对象传递给模块类的构造函数之后创建。因此,其函数内的“this.window”将引用该窗口对象。在非命名空间版本中,“this.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 定义的第一个快照。 |
浏览器兼容性
电脑端 | 移动端 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome
|
Edge
|
Firefox
|
Internet Explorer
|
Opera
|
Safari
|
Android webview | Chrome for Android
|
Edge Mobile | Firefox for Android
|
Opera for Android
|
iOS Safari | |
基本支持 | 支持 | ? | 支持 | ? | ? | ? | 支持 | 支持 | ? | 支持 | ? | ? |