标题有点奇怪,不知道如何用一句话来解释它......
目前有一个对象有3个功能; func、funcSuccess 和 funcFailure。 func 包含一个 jQuery ajax 请求,其中 this.funcSuccess 作为成功回调, funcError 作为错误回调。 func 传递了一个回调,以便将任何成功值传递回,但是此回调需要在 funcSuccess 代码中执行。
代码如下:
var Obj =
{ func: function (callback) {
$.ajax(
{ type: 'POST'
, url: '/func'
, success: this.funcSuccess
, error: this.funcError
}
)
}
, funcSuccess: function (res) {
// THIS IS WHERE CALLBACK IS NEEDED
callback(res.thing)
}
, funcError: function (res) {
debug(res)
}
}
我想知道是否有一种更简洁的方法来做到这一点,而不是:
var that = this
$.ajax(
{ type: 'POST'
, url: '/func'
, success: function (res) {
that.funcSuccess(res)
}
, error: this.funcError
}
)
很确定我错过了一些明显的东西,只是今天不太明白......
最佳答案
如何将回调显式存储在对象中,这样您就不必担心闭包范围:
var Obj =
{ func: function (callback) {
//this.callback = callback;
$.ajax(
{ type: 'POST'
, url: '/func'
, success: $.proxy(this.funcSuccess, this, callback)
, error: $.proxy(this.funcError, this)
}
)
}
, funcSuccess: function (callback, res) {
callback(res.thing)
}
, funcError: function (res) {
debug(res)
}
}
编辑:我忘记将回调绑定(bind)到this
。在 JQuery 中,您可以使用 $.proxy
来完成此操作,请参阅上面的更改。
编辑:进一步整洁(jQuery 1.6 允许这样做),将回调作为参数传递给 $.proxy
,因此无需将其附加到当前对象。
关于JavaScript 作用域 - 将回调传递给已定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14628124/