2013-02-28 31 views
2

为什么this关键字在下面的代码表达不同的价值观?“这个”关键字在javascript返回不同

var t = { 
    a: "a", 
    b: { 
     c: "c", 
     d: function() { 
      return this; 
     } 
    }, 
    f: function() { 
     return this; 
    }, 
    g: this 
} 

var k = t.f(), 
    l = t.g; 

alert(k); // returns [object object] i.e 't' 
alert(l); // returns [object DOMWindow] i.e 'window' 
+3

http://stackoverflow.com/questions/3127429/javascript-this-keyword?rq=1 – DCoder 2013-02-28 08:08:44

回答

6

如果你已经习惯了像C++,Java或C#,关于理解在JavaScript this的第一件事就是一些其他编程语言是:这是一个从this在其它语言完全不同的,即使它看起来很相似,有时甚至有相似的行为。

当你创建t对象,你捕捉this如创建对象时的并将其存储在属性g。所以g将是什么this是当t被创建。由于this指的是全局对象(window,在浏览器上),在默认情况下,除非你使用严格模式,这就是t.g会。

相反,你t.f功能越来越称为并返回呼叫中存在的的this值。在JavaScript(现在)中,this完全由确定,函数如何被称为而不是定义它的位置。特别是,当您将函数作为从属性引用中检索函数的表达式的一部分调用时,this被设置为调用中的对象。这是说,当你调用f期间做t.f()thist的复杂的方式。

一些进一步阅读(我的博客):