我发现自己使用一种奇怪的方式将回调函数添加到我的函数中,我想知道是否有一种更通用的方法来向函数添加回调,最好的情况是我会遇到一种情况,我的所有函数都会检查最后给定的函数作为函数的参数,如果是,则将其用作回调。
这就是我过去的做法:
var myFunc = function( obj ) {
if ( arguments.length > 0 ) {
if ( _.util.typeofObj( arguments[arguments.length-1] ) === Function ) {
var callback = arguments[arguments.length-1];
}
}
// some code ...
if ( callback !== undefined ) {
callback();
}
};
var foo = myFunc( myObj, function(){
alert( 'Callback!' );
});
有什么建议吗?
答案 0 :(得分:13)
我更喜欢形式参数:
var myFunc = function(obj, callback) {
...
}
这样就可以明显看出有回调。你也不必乱用arguments
对象;您可以查看callback
是否为undefined
,然后检查它是否属于合适的类型(Function
)。
答案 1 :(得分:5)
不确定你在这里尝试做什么,但是添加一个看似更直接的回调的方法:
function( obj, callback ) {
if(callback) {
callback();
}
}
答案 2 :(得分:5)
如果你真的想,你可以使用.cb原型扩展Function.prototype。类似的东西:
Function.prototype.cb = function(cb){
var self = this;
return function(){
self.callback = cb || function(){};
self.apply(self, arguments);
}
}
然后您的代码将压缩为:
var myFunc = function(obj){
// some code
this.callback(); // callback will always be defined
}
并且电话会稍微改变:
myFunc.cb(function(){
// callback code
})(myObj);
只是一个想法。您可以根据需要制作语法。