JavaScript: window.top和top.window有什么区别?

3

我最近一直在研究JavaScript的top功能,并注意到我可以运行window.toptop.window。从我看到的,这两者在功能上没有区别,所以奇怪的是两者都可以运行。

// They appear to be the same here at least:
console.log(window.top === top.window);

我想请问一下,是否有人知道这个功能为什么存在两次,它们之间有什么区别?我想了解的是浏览器支持方面的差异,或者与以某种方式运行它相关的异常错误。请参考MDN文档
1个回答

6

window 是全局对象,因此可以像独立变量一样访问它上面的属性。在顶层引用 top 与引用 window.top 是相同的。所以问题归结为什么两者之间有区别。

window.top

并且

window.top.window

window.top 提供了一个窗口对象(如果你在 iframe 中,它可能与 window 相同,或者是外部窗口),而窗口的 window 属性是对同一 window 对象的引用(这是一种奇怪的自我引用),因此这两个引用也完全相同。您可以依靠它们。

window.top === window.top.window

始终为true


非常有用的信息,谢谢!那么我问题的第二部分是,为什么?为什么窗口可以引用自身?因为也可以执行 window.windowwindow.window.window.window 等操作。 - lukehillonline
1
MDN表示:将window属性引用到对象本身的目的可能是为了方便引用全局对象。否则,您需要在脚本顶部进行手动的var window = this;赋值。是的,您可以无限地链接window,就像obj = {}; obj.obj = obj; obj.obj.obj.obj.obj === obj将返回true一样。 - CertainPerformance

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接