我有这段代码
var o = {
f: function() {
console.log(this);
}
}
var o2 = {
h:function(m){m()}
};
o2.h(o.f)
Run Code Online (Sandbox Code Playgroud)
控制台打印 - >窗口
任何人都可以解释为什么我有窗户而不是o2?谢谢.
值this取决于对函数的实际调用的细节,而不是其他任何内容.你的函数"f"被声明为"o"对象的属性,或者碰巧被一个以"o2"作为其this值的函数调用的事实与它完全无关.因为函数最终在没有任何"接收器"对象this的情况下被调用,所以默认值是全局对象(window).
如果希望使用"o"作为引用调用"f",或者"o2",则可以使用.bind()函数继承自Function原型的方法:
o2.h(o.f.bind(o2));
Run Code Online (Sandbox Code Playgroud)