我有这段代码
var o = {
f: function() {
console.log(this);
}
}
var o2 = {
h:function(m){m()}
};
o2.h(o.f)
控制台打印 - >窗口
任何人都可以解释为什么我有窗户而不是o2? 感谢。
答案 0 :(得分:6)
this
的值取决于对函数的实际调用的细节,没有别的。您的函数“f”被声明为“o”对象的属性,或者碰巧被一个“o2”作为其this
值的函数调用的事实与...无关它。因为函数最终在没有任何“receiver”对象的情况下被调用,所以this
的值默认为全局对象(window
)。
如果希望以“o”作为引用或“o2”来调用“f”,则可以使用函数原型继承的.bind()
方法:
o2.h(o.f.bind(o2));