为什么DOM既有窗口又有自己?

时间:2010-05-09 11:48:13

标签: javascript dom

为什么DOM有一个名为self的对象,另一个名为window的对象是同一个东西?要添加混淆window有一个名为self的属性,所以:

window === window.self === self

为什么会这样?我应该使用哪一个?

3 个答案:

答案 0 :(得分:5)

self由javascript环境定义并指向[global]对象(但不是规范的一部分,因此可能不存在),而window是DOM规范的一部分。 在大多数浏览器中,window用作[全局]对象,但并非总是如此。

self == window.self并不奇怪,因为它们是同一个对象 - 当查找self时,它被发现是全局对象的属性(window)。所以它实际上与window.self == window.self相同。

如其他地方所述,为了可靠地引用[global]对象,您应该通过在全局执行上下文中运行var global = this;来定义它的sef。

答案 1 :(得分:1)

当您致电self时, window.self,就像任何其他全局属性一样(例如location真的是window.location })。

它在那里的原因?通常用于这样的检查:

if(window.top != window.self) {
  alert("We're in a frame");
}

答案 2 :(得分:0)

全球selfwindow.self的快捷方式。它们都是完全相同的对象。

至于为什么同时存在windowself,在网页上下文中,self始终等于window(据我所知)。但我想这并不总是这样--Javascript / ECMAScript不仅限于在有DOM的网页中使用。

至于使用什么,两者都应该在普通的网页上下文AFAIK中使用。不过,请参阅@ Nick的评论,了解使用window的好参数。