我有一個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