2

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

1 回答 1

6

如果您习惯于其他一些编程语言,如 C++、Java 或 C#,那么了解thisJavaScript 的第一件事是:它与其他语言完全不同this,尽管它看起来非常相似,有时甚至行为相似。

在创建t对象时,您会捕获对象创建时的this并将其存储在属性中g。因此g,无论this何时t创建。因为默认情况下this指的是全局对象(window浏览器上的 , ),除非您使用严格模式,否则就是t.g这样。

相反,您的t.f函数被调用并返回this存在于 call中的值。在 JavaScript(目前)中,this完全取决于函数的调用方式,而不是定义的位置。特别是,当您将函数作为从属性引用中检索函数的表达式的一部分调用时,this将设置为调用中的对象。这是一种复杂的说法,当你这样做时t.f(),在调用期间fthis将会t

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

于 2013-02-28T08:14:21.747 回答