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() and window.alert(). 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”并能够轻松获取文档位置。另一个优点是, such a class 的对象(即使该类是在模块外部定义的)可以随时更改其对窗口的引用,而如果它们硬编码了对“window”的引用,则无法做到这一点。类中的默认值仍然可以设置为当前窗口对象。
规范
| 规范 |
|---|
| HTML # dom-window-dev |
浏览器兼容性
加载中…