为什么浏览器中的窗口对象指向窗口对象。Mozilla网站称其原因是
让window属性引用对象本身的目的(可能)是为了更容易地引用全局对象(否则,您必须在脚本顶部执行手动
var window = this;赋值)。
因此,我的问题是,如何将对象无限地指向对象,以及如何帮助避免执行var window = this;
window.window // returns window object
window.window.window // also returns an window发布于 2016-03-04 05:25:47
window.window或window.window.window等等,这不是一个实现,这是一个副作用
考虑一下这个
var win = {};
win.win = win;现在
win.win === win和
win.win.win === win所以他们可以做的是
var window = this;实际上这和
this.window = this;因为在全局范围中声明的所有变量都是(这个)的属性,所以这样做导致了window.window.window.window....。
发布于 2016-03-04 05:23:51
您可以这样添加到Object.prototype中:
Object.prototype.mySuperReference = {a: 42};现在,您创建的任何对象都将具有一个mySuperReference属性。例如:
Object.prototype.mySuperReference = {a: 42};
var z = {};
z.mySuperReference
Object {a: 42}我怀疑window这么做是因为它是特殊的--它是API的一部分。在我写的任何东西中,我都没有必要做上述的事情。它被称为猴子修补,这通常是一个坏主意。但是,这将使引用像window一样工作。
要使其行为类似于window,只需添加对window的引用:
window = Object.prototype.mySuperReference = {a: 42};现在:
mySuperReference.mySuperReference.mySuperReference
Object {a: 42}发布于 2016-03-04 05:36:57
因此,我的问题是如何无限地将一个对象指向对象,以及如何帮助避免执行var window =这个;
等级库说
除了在本规范中定义的属性之外,全局对象还可能具有额外的主机定义属性。这可能包括一个值为全局对象本身的属性;例如,在HTML对象模型中,全局对象的窗口属性是全局对象本身。
因此,要回答您的问题,这个global对象将window作为属性之一(再次是一个全局对象)。通过将窗口分配给自己,所有window属性都可以在所有作用域中使用全局上下文,而无需缓存全局上下文- this。简而言之,它允许在不执行window.alert()等的情况下全局调用窗口属性和方法。
否则,如何将window.alert()简单地作为alert()调用,因为警报不是在全局上下文中定义的。
https://stackoverflow.com/questions/35788475
复制相似问题