Window:window 屬性
Window 物件上的 window 屬性指向視窗物件本身。
因此,以下表達式都返回同一個視窗物件
js
window.window;
window.window.window;
window.window.window.window;
// …
在網頁中,window 物件也是一個全域性物件。這意味著
-
你的指令碼的全域性變數實際上是
window的屬性jsvar global = { data: 0 }; alert(global === window.global); // displays "true" -
你可以訪問 window 物件的內建屬性,而無需在前面加上
window.。jssetTimeout(() => alert("Hi!"), 50); // equivalent to using window.setTimeout() and window.alert(). alert(window === window.window); // displays "true"
window 屬性指向物件本身的目的是,很可能是為了方便引用全域性物件。否則,你不得不在指令碼頂部手動進行 let window = this; 賦值。
另一個原因在於,如果沒有此屬性,你就無法編寫例如 window.open('https://google.com/') 這樣的程式碼。你將不得不改為使用 open('https://google.com/')。
使用此屬性還有另一個原因,那就是庫希望提供面向物件版本和非面向物件版本(特別是 JavaScript 模組)。例如,如果我們引用“this.window.location.href”,一個 JavaScript 模組可以在其定義的類中定義一個名為“window”的屬性(因為預設情況下不存在全域性“window”變數),該屬性可以在將視窗物件傳遞給模組類的建構函式後建立。因此,在其函式中的“this.window”將指向該視窗物件。在非名稱空間版本中,“this.window”將指向“window”並能夠輕鬆獲取文件位置。另一個優點是, such a class 的物件(即使該類是在模組外部定義的)可以隨時更改其對視窗的引用,而如果它們硬編碼了對“window”的引用,則無法做到這一點。類中的預設值仍然可以設定為當前視窗物件。
規範
| 規範 |
|---|
| HTML # dom-window-dev |
瀏覽器相容性
載入中…