首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >window.window in JavaScript

window.window in JavaScript
EN

Stack Overflow用户
提问于 2016-03-04 05:13:54
回答 3查看 1K关注 0票数 9

为什么浏览器中的窗口对象指向窗口对象。Mozilla网站称其原因是

让window属性引用对象本身的目的(可能)是为了更容易地引用全局对象(否则,您必须在脚本顶部执行手动var window = this;赋值)。

因此,我的问题是,如何将对象无限地指向对象,以及如何帮助避免执行var window = this;

代码语言:javascript
复制
window.window // returns window object
window.window.window // also returns an window
EN

回答 3

Stack Overflow用户

发布于 2016-03-04 05:25:47

window.window或window.window.window等等,这不是一个实现,这是一个副作用

考虑一下这个

代码语言:javascript
复制
var win = {};
win.win = win;

现在

代码语言:javascript
复制
win.win === win

代码语言:javascript
复制
win.win.win === win

所以他们可以做的是

代码语言:javascript
复制
var window = this;

实际上这和

代码语言:javascript
复制
this.window = this;

因为在全局范围中声明的所有变量都是(这个)的属性,所以这样做导致了window.window.window.window....

票数 8
EN

Stack Overflow用户

发布于 2016-03-04 05:23:51

您可以这样添加到Object.prototype中:

代码语言:javascript
复制
Object.prototype.mySuperReference = {a: 42};

现在,您创建的任何对象都将具有一个mySuperReference属性。例如:

代码语言:javascript
复制
Object.prototype.mySuperReference = {a: 42};
var z = {};
z.mySuperReference
Object {a: 42}

我怀疑window这么做是因为它是特殊的--它是API的一部分。在我写的任何东西中,我都没有必要做上述的事情。它被称为猴子修补,这通常是一个坏主意。但是,这将使引用像window一样工作。

要使其行为类似于window,只需添加对window的引用:

代码语言:javascript
复制
window = Object.prototype.mySuperReference = {a: 42};

现在:

代码语言:javascript
复制
mySuperReference.mySuperReference.mySuperReference
Object {a: 42}
票数 0
EN

Stack Overflow用户

发布于 2016-03-04 05:36:57

因此,我的问题是如何无限地将一个对象指向对象,以及如何帮助避免执行var window =这个;

等级库

除了在本规范中定义的属性之外,全局对象还可能具有额外的主机定义属性。这可能包括一个值为全局对象本身的属性;例如,在HTML对象模型中,全局对象的窗口属性是全局对象本身。

因此,要回答您的问题,这个global对象将window作为属性之一(再次是一个全局对象)。通过将窗口分配给自己,所有window属性都可以在所有作用域中使用全局上下文,而无需缓存全局上下文- this。简而言之,它允许在不执行window.alert()等的情况下全局调用窗口属性和方法。

否则,如何将window.alert()简单地作为alert()调用,因为警报不是在全局上下文中定义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35788475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档