JavaScript中的window.window

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的window.window相关的知识,希望对你有一定的参考价值。

为什么浏览器中的窗口对象指向窗口对象。 Mozilla网站说明了原因

让window属性引用对象本身(可能)是为了让它易于引用全局对象(否则你必须在脚本的顶部进行手动var window = this;赋值)。

所以,我的问题是,如何无限地将一个对象指向对象以及这有助于避免做var window = this;

window.window // returns window object
window.window.window // also returns an window
答案

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....

另一答案

你可以像这样添加到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}
另一答案

所以我的问题是如何无限地将一个对象指向对象以及它如何有助于避免做var window = this;

Spec

除了本规范中定义的属性外,全局对象还可能具有其他主机定义的属性。这可能包括一个属性,其值是全局对象本身;例如,在html文档对象模型中,全局对象的window属性是全局对象本身。

所以回答你的问题 - 这个global对象有window作为属性之一(它也是一个全局对象)。通过为自身分配窗口,允许所有window属性在所有范围内都具有全局上下文,而无需缓存全局上下文 - this。简而言之,它允许在不执行window.alert()等的情况下全局调用窗口属性和方法。

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

以上是关于JavaScript中的window.window的主要内容,如果未能解决你的问题,请参考以下文章

Javascript - ExtJs - Window组件

JavaScript Object 对象 再解

JavaScript学习笔记整理Day15

从零开始学习前端JAVASCRIPT — 5JavaScript基础BOM

javascript--BOM(browser object model)五大对象

javascript关于top的坑