我有一个JavaScript处理检测页面是否在框架中。我用top.frames []等等,一切正常。自我和窗户有什么区别?
在这个脚本中,我注意到我可以互换地使用“窗口”或“自我”,并且所有东西都能正常工作。在HTML页面中使用时,“窗口”与“自我”相同吗?
我有一个JavaScript处理检测页面是否在框架中。我用top.frames []等等,一切正常。自我和窗户有什么区别?
在这个脚本中,我注意到我可以互换地使用“窗口”或“自我”,并且所有东西都能正常工作。在HTML页面中使用时,“窗口”与“自我”相同吗?
从JavaScript权威指南:
Window对象定义了一些 属性和允许你 操纵Web浏览器窗口的方法。 它还定义了指向其他重要对象的属性 ,例如
document
属性为 Document对象。最后,窗口 对象具有两个自引用 属性,window
和self
。你可以使用全局变量 直接引用到Window对象,即 。
总之,window
和self
都是对Window对象的引用,它是客户端JavaScript的全局对象。
除FF6.0之外的necro-bug,http://stackoverflow.com/a/7769187/139361,'window'和'self'应该是相同的。任何人都知道任何其他错误? --------------------------------------- 我必须补充说,使用'self'对大多数JavaScript开发人员来说都很混乱,所以使用'window'代替。 – Dan 2014-01-16 10:17:32
window
和self
都是指当前网页的全局对象。
欲了解更多信息看看http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific
下面是the MDN page for window.self
说明和示例:
if (window.parent.frames[0] != window.self) {
// this window is not the first frame in the list
}
window.self在比较过程几乎总是使用像在上面的例子中,其发现当前窗口是否是父框架集中的第一个子帧。
鉴于目前没有人使用框架集,我认为没有必要考虑self
没有有用的情况。此外,至少在Firefox中,对window
而不是window.self
进行测试是等效的。
self
是只读属性,可以比更灵活,并且有时支持,所述window
直接使用。这是因为self
的参考值根据操作环境而变化(与window.self
不同,只有存在window
时才存在)。正如其他人所说的那样,这也是比较好的选择。
例如,如果您在Web Worker(位于其自己的后台线程)内部使用self
,self
实际上会引用WorkerGlobalScope.self
。但是,如果在正常的浏览器环境中使用self
,则self
只会返回对Window.self
(具有document
,addEventListener()
以及您以前看过的所有其他内容)的引用。
TL; DR而在window.self
的.self
不会,如果window
不存在,存在于自己的意志点使用self
到Window.self
在传统的窗口/浏览器上下文,或在网络工作者背景WorkerGlobalScope.self
。
像往常一样,MDN在这个问题上有一个很好的writeup in their JavaScript docs。 :)
旁注:var self = this
切换后维持到上下文的引用:的self
这里的用法不应该与声明的局部变量的共同JS模式相混淆。
你可以在这里阅读更多关于:Getting Out of Binding Situations in JavaScript。
使用Web Workers时自己和窗口不是一回事。参见[http://stackoverflow.com/questions/11219775/global-variable-in-web-worker][1] [1]:http://stackoverflow.com/questions/11219775/global - 在网络工作者的变量 – user1872904 2014-06-02 13:45:17