Javascript,调用函数的上下文(this)

时间:2013-10-03 14:03:19

标签: javascript

我有这段代码

var o = {
    f: function() {
        console.log(this);
    }
}

var o2 = {
    h:function(m){m()}
};

o2.h(o.f)

控制台打印 - >窗口

任何人都可以解释为什么我有窗户而不是o2? 感谢。

1 个答案:

答案 0 :(得分:6)

this的值取决于对函数的实际调用的细节,没有别的。您的函数“f”被声明为“o”对象的属性,或者碰巧被一个“o2”作为其this值的函数调用的事实与...无关它。因为函数最终在没有任何“receiver”对象的情况下被调用,所以this的值默认为全局对象(window)。

如果希望以“o”作为引用或“o2”来调用“f”,则可以使用函数原型继承的.bind()方法:

o2.h(o.f.bind(o2));