为什么this关键字在以下代码中表达不同的值?
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'
Run Code Online (Sandbox Code Playgroud)
如果您已经习惯了其他一些编程语言,比如C++,Java或C#,那么this在JavaScript中理解的第一件事就是:它this与其他语言完全不同,即使它看起来非常相似,有时甚至表现得相似.
在创建t对象时,将捕获创建对象时的值,this并将其存储在属性中g.那g将是什么this时候t创建.因为默认情况下this引用全局对象(window在浏览器上),除非您使用的是严格模式,否则就是t.g这样.
相反,您的t.f函数被调用并返回调用this中存在的值.在JavaScript(现在)中,完全取决于函数的调用方式而不是函数的定义方式.特别是,当您将函数作为从属性引用检索函数的表达式的一部分调用时,将设置为调用中的对象.这是说,当你做一个复杂的方式,在调用过程中,会.thisthist.f()fthist
进一步阅读(在我的博客上):