自我与窗户有什么区别?

Mil*_*kov 37 javascript window

我有一个JavaScript来处理检测页面是否在框架中.我使用top.frames []等,一切正常.

在这个脚本中,我注意到我可以互换地使用"窗口"或"自我",一切仍然有效.在HTML页面中使用"窗口"是否与"self"相同?

End*_*der 19

来自Javascript:The Definitive Guide:

Window对象定义了许多属性和方法,允许您操作Web浏览器窗口.它还定义了引用其他重要对象的document属性,例如Document对象的属性.最后,Window对象有两个自引用属性,windowself.您可以使用全局变量直接引用Window对象.

总之,无论windowself对窗口对象,这是客户端的JavaScript的全局对象的引用.


Tit*_*tus 15

self是一个只读属性,可以比直接更灵活,有时更window直接使用.这是因为self引用的变化取决于操作上下文(不像window.self,只有存在时才window存在).正如其他人所提到的那样,这对于比较也很有用.

例如,如果您self在Web Worker(它位于自己的后台线程中)内部使用,self则实际将引用WorkerGlobalScope.self.但是,如果你使用self的浏览器中正常情况下,self将简单地返回到基准Window.self(即有一个document,addEventListener()和所有其他的东西你看惯了).

TL; DR而.selfin在window.self不存在的情况下将不存在,window单独使用self将指向Window.self传统的窗口/浏览器上下文,或者WorkerGlobalScope.self在Web工作者上下文中.

像往常一样,MDN 在他们的JavaScript文档中对这个主题有很好的写作.:)


旁注:self此处的用法不应与声明局部变量的常见JS模式混淆:var self = this在切换后维护对上下文的引用.

你可以在这里阅读更多相关内容:在JavaScript中摆脱绑定情境.


Jes*_*lon 11

以下是MDN页面中window.self的解释和示例:

if (window.parent.frames[0] != window.self) {
   // this window is not the first frame in the list
}
Run Code Online (Sandbox Code Playgroud)

window.self几乎总是在比较中使用,如上例所示,它查明当前窗口是否是父框架集中的第一个子框架.

鉴于目前没有人使用框架集,我认为可以考虑没有有用的案例self.此外,至少在Firefox中,测试window而不是window.self等效.

  • 鉴于`window === window.self`是'true`(至少在FF和Chrome中),为什么不使用`window.parent.frames [0]!== window`? (5认同)

dav*_*ser 5

window两者self都引用当前网页的全局对象。

欲了解更多信息,请查看http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific