我有两个类似的 Javascript“对象”......
var Object2 = new (function() {
this.FetchData = function(callback) {
// do some stuff
callback(data);
};
});
var Object1 = new (function() {
this.DisplayStuff = function() {
};
this.LoadData = function() {
Object2.FetchData(this.OnData);
};
this.OnData = function(data) {
// this == window
this.DisplayStuff(); // doesn't work
};
});
当Object1收到OnData的回调时,“this”的值被设置为window。有什么方法可以解决这个问题,以便 OnData 内的“this”的值将是 Object1 的实例而不是窗户?
框架中常用的一种技术是让调用者决定要做什么this
上下文应该用于回调函数。所以FetchData
函数看起来像(感谢@Andy告诉我上下文为空或未定义时的默认范围 - 它是全局对象),
this.FetchData = function(callback, context) {
callback.call(context, data);
};
打电话时FetchData
, pass Object1
作为回调的上下文,
Object2.FetchData(this.OnData, this);
另一种选择是绑定OnData
功能与Object1
using
Object2.FetchData(this.onData.bind(this));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)