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

blu*_*dtt 2 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'
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 6

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

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

相反,您的t.f函数被调用并返回调用this中存在的值.在JavaScript(现在)中,完全取决于函数的调用方式而不是函数的定义方式.特别是,当您将函数作为从属性引用检索函数的表达式的一部分调用时,将设置为调用中的对象.这是说,当你做一个复杂的方式,在调用过程中,会.thisthist.f()fthist

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