2012-02-09 108 views

回答

8

window是腳本執行的當前瀏覽器窗口的引用。window.self顯然是其自身的自我引用。而且由於self這裏是全局對象window的一個屬性,所以它也可以被訪問,就像它本身是一個「全局」變量一樣:只是self

所以最後三個在大多數情況下確實是一回事。

this但是完全不同:它是一個指向當前範圍的變量。如果您在控制檯中執行以下代碼:

> var myPackage = {} 
> myPackage.method = function() {console.log(this)} 
> myPackage.method() 

this將指向myPackage對象(的method範圍內)。

+2

+1,但僅僅是迂腐,'self'和'window'都是對javascript全局對象的引用,它包含'self'和'window'兩個屬性(都指向它自己)。這意味着沒有「好像」 - 「window」與「self」屬性一樣多,而「self」是「window」的屬性。並且添加一些(稍微)不那麼迂腐的東西:所有這些(除'this' ... ;-))僅僅是ECMA/Javascript在瀏覽器中給出的。 'window'和'self'都不是語言本身的一部分,並且可能不會出現在ECMA/Javascript的其他用途中。 – JimmiTh 2012-02-09 21:12:03

+0

在IE中,「窗口」是......特別的。對於所有實際的目的,'window','self'和'window.self'(和在某些情況下的'this')仍然是等價的,但是*嚴格的相等運算符說它是一個不同的對象。在全局範圍內,所有這些表達式在IE中評估爲true:'window === this','window!== self','window!== window.window','window!== window.self '。 == ==運算符說它們都是平等的。 – 2012-02-09 22:16:45

2
this 
DOMWindow 

this總是實際的上下文JavaScript表達式被稱爲中。所以你的情況其在全球範圍內,這是window對象,當你在瀏覽器中運行它。注意在nodeJs中運行相同的結果會給你另一個結果。

self 
//DOMWindow 

From the MDN Docs

返回對象參照窗口對象。

window 
// DOMWindow 

它你叫什麼:window對象。

window.self 
//DOMWindow 

它和上面調用自己一樣導致你的上下文是窗口。因此,在全球範圍內調用window.selfselfthis.self時是相同的。

1

總是這個關鍵字引用它被調用的上下文。但是即使在改變上下文之後,self和window也指向Window本身。

// Log function 
function logAll(){ 
    console.log("this >", this); 
    console.log("self >", self); 
    console.log("window >", window); 
    console.log("window.self >", window.self); 
    console.log("this.self >", this.self); 
}; 

// Class Car 
function Car(){ 
    this.self = 6; 
}; 

// Instance of Car 
var honda = new Car(); 
honda.self = 5; 

// logAll() called in context Gloabal 
logAll(); 

// Outputs 
this > Window 
self > Window 
window > Window 
window.self > Window 
this.self > Window 

// logAll() called in context honda 
logAll.call(honda); 

// Outputs 
this > Car { self= 5 } 
self > Window 
window > Window 
window.self > Window 
this.self > 5 

在這裏你可以看到當全球範圍內被稱爲this.self回報窗口,因爲在全球範圍內

this = windows 
this.self = windows.self 
this.self = Windows 

但是當你在本田汽車的一個實例的上下文:

this = honda 
this.self = honda.self 
this.self = 5 

在使用OOP和繼承時,上下文在Javascript中扮演着重要的角色。

相關問題