为什么DOM有一个名为self
的对象,另一个名为window
的对象是同一个东西?要添加混淆window
有一个名为self
的属性,所以:
window === window.self === self
为什么会这样?我应该使用哪一个?
答案 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)
全球self
是window.self
的快捷方式。它们都是完全相同的对象。
至于为什么同时存在window
和self
,在网页上下文中,self
始终等于window
(据我所知)。但我想这并不总是这样--Javascript / ECMAScript不仅限于在有DOM的网页中使用。
至于使用什么,两者都应该在普通的网页上下文AFAIK中使用。不过,请参阅@ Nick的评论,了解使用window
的好参数。