JavaScript this.window不等于window

问题描述 投票:4回答:4

考虑以下顶级JavaScript代码:

if (this.window === window)
    alert('same');
else
    alert('different'); // alerts: different  

为什么this.window和window不完全相同?我也在表达式的rhs上尝试了'this'并得到了相同的结果。

javascript
4个回答
7
投票

在Internet Explorer中(我测试的是8.0.7600),没有限定符的this实际上解析为全局窗口对象。在我所尝试过的所有其他浏览器中(Chrome,Firefox,Opera),this.window === window,以及this === window

在IE中试试这个来验证:

if (this === window)
  alert('same');
else
  alert('different');

3
投票

似乎HTML元素不包含指向其父窗口的指针,就像它对parentNode一样。因此,当this.window不是this对象时,window将返回undefined。

window对象似乎能够引用自己,也许是因为它是唯一足以“看到”自身的节点。因此,window == window.window.window.window等。

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

看到单个HTML元素不能用.window引用他们的父窗口,我真的没有看到使用this.window的一点,虽然我喜欢在这里证明是错的。

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


2
投票

在这里工作......

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


0
投票

因为this在全球范围内等于window

© www.soinside.com 2019 - 2024. All rights reserved.