javascript中的'this'关键字以不同方式返回

时间:2013-02-28 08:06:08

标签: javascript

为什么 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'

1 个答案:

答案 0 :(得分:6)

如果您已经习惯了其他一些编程语言,如C ++,Java或C#,那么在JavaScript中理解this的第一件事是:它与其他语言中的this完全不同,甚至虽然它看起来非常相似,有时甚至表现得相似。

当您创建t对象时,您会在创建对象时捕获this,并将其存储在属性{{1}中}。因此,g将是创建g时的this。因为默认情况下t引用全局对象(this,在浏览器上),除非您使用的是严格模式,这就是window将会是什么。

相比之下,您的t.g函数正在调用,并返回调用中存在t.f值。在JavaScript(现在)中,this完全由如何调用函数而不是它定义的位置决定。特别是,当您将函数作为从属性引用检索函数的表达式的一部分调用时,this将设置为调用中的对象。这是一种复杂的说法,当您this t.f()时,f this t将会{{1}}。

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