2012-02-09 52 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中扮演着重要的角色。

相关问题