我发现自己使用一种奇怪的方式将回调函数添加到我的函数中,我想知道是否有一种更通用的方法来向函数添加回调,最好的情况是我会遇到一种情况,我的所有函数都会检查最后一个给定的param for be一个函数,如果是这样,则将其用作回调函数.
这就是我过去的做法:
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!' );
});
Run Code Online (Sandbox Code Playgroud)
有什么建议?
Viv*_*ath 13
我更喜欢一个正式的参数:
var myFunc = function(obj, callback) {
...
}
Run Code Online (Sandbox Code Playgroud)
这样就可以明显看出有回调.你也不必乱搞arguments对象; 你可以检查是否callback是undefined,然后检查它是否是合适的类型(Function).
不确定你在这里尝试做什么,但是添加一个看似更直接的回调的方法:
function( obj, callback ) {
if(callback) {
callback();
}
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想,可以使用.cb原型扩展Function.prototype.就像是:
Function.prototype.cb = function(cb){
var self = this;
return function(){
self.callback = cb || function(){};
self.apply(self, arguments);
}
}
Run Code Online (Sandbox Code Playgroud)
那么你的代码将压缩为:
var myFunc = function(obj){
// some code
this.callback(); // callback will always be defined
}
Run Code Online (Sandbox Code Playgroud)
电话会稍微改变:
myFunc.cb(function(){
// callback code
})(myObj);
Run Code Online (Sandbox Code Playgroud)
只是一个想法.您可以根据需要制作语法.
| 归档时间: |
|
| 查看次数: |
8273 次 |
| 最近记录: |