我想要类似这样的东西:
function AjaxService()
{
this.Remove = function (id, call_back)
{
myWebService.Remove(id, CallBack)
}
function CallBack(res) {
call_back(res);
}
}
所以我的调用程序将是这样的:
var xx = new AjaxService();
xx.Remove(1,success);
function success(res)
{
}
此外,如果我想向成功函数添加更多参数,我将如何实现它。
说如果我有这样的成功功能:
var xx = new AjaxService();
//how to call back success function with these parameters
//xx.Remove(1,success(22,33));
function success(res,val1, val2)
{
}
帮助将不胜感激。
使用闭包和函数工厂:
function generateSuccess (var1,var2) {
return function (res) {
// use res, var1 and var2 in here
}
}
xx.Remove(1,generateSuccess(val1,val2));
您在这里传递的不是 generateSuccess
函数,而是 generateSuccess
返回的匿名函数,它看起来像 Remove
预期的回调. val1
和 val2
被传递到 generateSuccess
并被返回的匿名函数中的闭包捕获。
更清楚地说,这就是正在发生的事情:
function generateSuccess (var1,var2) {
return function (res) {
// use res, var1 and var2 in here
}
}
var success = generateSuccess(val1,val2);
xx.Remove(1,success);
或者如果您更喜欢内联:
xx.Remove(1,(function(var1,var2) {
return function (res) {
// this is your success function
}
})(val1,val2));
可读性差,但可以避免命名工厂函数。如果您不是在循环中执行此操作,那么 Xinus 的解决方案也比我的内联版本更简单。但请注意,在循环中,您需要双闭包机制来断开传递给回调函数的变量与当前作用域中的变量。