在这样的函数中,可选成功和错误回调的最佳做法是什么?这种方法有意义吗?对我来说似乎有点臃肿。
功能声明:
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}
使用回调调用
myFunc(2,{
onError: function(myNewNumber){
// do stuff
},
onSuccess: function(myNewNumber){
// do stuff
}
})
在没有回调的情况下调用它:
myFunc(2);
答案 0 :(得分:4)
需要注意的一些事项;
options.onSuccess = options.onSuccess || function(){};
正在检查会员的存在,而不是检查其功能。
您可能需要options.onSuccess = (typeof options.onSuccess == "function") ? options.onSuccess : function () { };
onError
与略微优化一样,您可以将空函数指向同一个函数;而不是两次重建它。如果你正在使用jQuery,jQuery定义jQuery.noop()
:
options.onSuccess = options.onSuccess || jQuery.noop;
options.onError = options.onSuccess || jQuery.noop;
在回调是异步的情况下,您将在检查后,但在回调被触发之前,将options.onSuccess
和options.onError
更改为开放状态;
var myFunc = function(myNumber, options){
options = options || {};
options.onSuccess = options.onSuccess || function(){};
options.onError = options.onSuccess || function(){};
var myNewNumber = myNumber * 2;
setTimeout(function () {
if(newVar > 10){
options.onSuccess(myNewNumber);
}else{
options.onError(myNewNumber);
}
}, 2000);
}
var obj = {
success: function () { alert('foo'); },
error: function () { alert('foo'); },
};
myFunc(10, obj);
delete obj.success;
delete obj.error;
执行回调后,success
和error
将不确定。
答案 1 :(得分:2)
我会通过在调用它们之前检查函数的存在来实现它:
var myFunc = function(myNumber, options){
options = options || {};
var myNewNumber = myNumber * 2;
if(newVar > 10){
if (options.onSuccess) { options.onSuccess(myNewNumber); }
}else{
if (options.onError) { options.onError(myNewNumber); }
}
}
这取决于您可能会调用这些回调的次数。如果它遍布整个地方,那么您的方式可能会更好,或者至少更清晰的代码。