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

JavaScript this.window不等于window
EN

Stack Overflow用户
提问于 2010-11-15 06:15:40
回答 4查看 7.6K关注 0票数 5

考虑下面的顶级javascript代码:

代码语言:javascript
复制
if (this.window === window)
    alert('same');
else
    alert('different'); // alerts: different  

为什么this.window和window不是严格相等的?我还在表达式的rhs上尝试了'this‘,并得到了相同的结果。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-15 06:26:16

在Internet Explorer (我测试的是8.0.7600)中,不带限定符的this实际上解析为全局窗口对象。在我尝试过的所有其他浏览器中(Chrome、火狐、Opera),在这种情况下使用的都是this.window === window --当然,还有this === window

在IE中尝试此操作以验证:

代码语言:javascript
复制
if (this === window)
  alert('same');
else
  alert('different');
票数 7
EN

Stack Overflow用户

发布于 2010-11-15 07:07:48

看起来好像超文本标记语言元素不像parentNode那样包含指向其父窗口的指针。因此,当this不是window对象时,this.window将返回undefined。

window对象似乎能够引用它自己,可能是因为它是唯一一个足够高的节点来“看到”它自己。因此,window == window.window.window.window等等。

浏览器之间的特性似乎与每个浏览器实现DOM结构的方式有关,特别是它们如何在顶层解释this

考虑到单个HTML元素不能用.window引用它们的父窗口,我真的看不出使用this.window有什么意义,尽管我希望在这里被证明是错误的。

如果您正在处理涉及跨两个不同窗口操作对象的代码,我建议您将新窗口分配给一个变量,例如var newWin = window.open(...),然后使用此变量引用新对象。

票数 3
EN

Stack Overflow用户

发布于 2010-11-15 06:17:36

在这里工作。

http://jsfiddle.net/rygar/DQYdk/

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

https://stackoverflow.com/questions/4180013

复制
相关文章

相似问题

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