考虑以下顶级JavaScript代码:
if (this.window === window)
alert('same');
else
alert('different'); // alerts: different
为什么this.window和window不完全相同?我也在表达式的rhs上尝试了'this'并得到了相同的结果。
在Internet Explorer中(我测试的是8.0.7600),没有限定符的this
实际上解析为全局窗口对象。在我所尝试过的所有其他浏览器中(Chrome,Firefox,Opera),this.window === window
,以及this === window
。
在IE中试试这个来验证:
if (this === window)
alert('same');
else
alert('different');
似乎HTML元素不包含指向其父窗口的指针,就像它对parentNode
一样。因此,当this.window
不是this
对象时,window
将返回undefined。
window
对象似乎能够引用自己,也许是因为它是唯一足以“看到”自身的节点。因此,window == window.window.window.window
等。
浏览器之间的特性似乎与每个实现DOM结构的方式有关,特别是它们如何在顶层解释this
。
看到单个HTML元素不能用.window
引用他们的父窗口,我真的没有看到使用this.window
的一点,虽然我喜欢在这里证明是错的。
如果您正在处理涉及跨两个不同窗口操纵对象的代码,我建议您将新窗口分配给变量,例如var newWin = window.open(...)
并随后使用此变量来引用新对象。
在这里工作......
因为this
在全球范围内等于window
。