-1

我有这段代码

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

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

o2.h(o.f)

控制台打印 --> 窗口

谁能解释为什么我有 windows 而不是 o2 ?谢谢。

4

1 回答 1

6

的值this由对函数的实际调用的细节决定,仅此而已。您的函数“f”被声明为“o”对象的属性,或者它恰好被一个以“o2”作为其this值的函数调用的事实与它完全无关。因为函数最终在没有任何“接收者”对象的情况下被调用,所以this默认情况下 的值是全局对象 ( window)。

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

o2.h(o.f.bind(o2));
于 2013-10-03T14:05:21.610 回答