给定类函数
game.PlayScreen = me.ScreenObject.extend({
onResetEvent: function() {
this.setAll(); //calls setAll(), which calls setGlobals()
this.saveNextLevelData(this.setAll);
},
saveNextLevelData : function (callback) {
$.get("./php/CRUD.php", {},
function (returned_data) {
callback(); //however, the callback of setAll throws
`undefined is not a function` error
}
},
setAll : function () {
log("setAll called");
this.setGlobals();
},
setGlobals : function () {
log("setGlobals called");
}
});
基本上,我对调用回调函数时this
上下文丢失的方式感到困惑。
在上面的代码中,
作品:this.setAll()
直接来自onResetEvent
输出"setAll called"
和"setGlobals called"
休息:callback()
从this.setAll()
输出$.get
调用"setAll called"
,但this.setGlobals();
打破......我认为由于丢失this
上下文...它输出Uncaught TypeError: undefined is not a function
当您调用包含属于父对象的函数(在本例中为this
)的回调函数时,我试图遵循this
的上下文。如果我想从this.setGlobals()
的回调中调用this.setAll()
,我究竟需要在哪里进行绑定?
由于
答案 0 :(得分:1)
我认为最好从调用者部分传递上下文,可以使用$.proxy() / Function.bind()完成,所以
this.saveNextLevelData($.proxy(this.setAll, this));
另一种解决方案是将当前对象作为上下文传递给来自ajax回调的回调,问题是默认情况下this
在回调中将引用ajax设置对象。所以
saveNextLevelData : function (callback) {
var self = this;
$.get("./php/CRUD.php", {},
function (returned_data) {
callback.call(self);
}
},