添加回调函数 - 总是
我发现自己使用一种奇怪的方式来添加回调函数到我的函数,我想知道是否有更通用的方式来添加回调函数,最好的情况下,我会有一种情况,所有的我的函数检查最后一个给定的参数是否是一个函数,如果是这样的话,将它用作回调函数。添加回调函数 - 总是
这是我做到了过去:
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!');
});
有什么建议?
如果您真的想要,可以使用.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);
只是一个想法。无论你想要什么,都可以使语法变得非常简单。
不知道你正在尝试做的,但方式来增加,似乎更直接的回调:
function(obj, callback) {
if(callback) {
callback();
}
}
或导致一些头部划伤,简称为'回调&&回调()' – Jacob 2011-03-28 20:16:10
@Jackob:typeof运算回调==“功能” &&回调()是清洁 – Andrey 2011-03-28 20:19:00
THX安德烈,如果使用PARAMS – ezmilhouse 2011-03-28 20:30:11
我更喜欢一个正式的参数:
var myFunc = function(obj, callback) {
...
}
这样,它显然有回调。您也不必乱用arguments
对象;您可以检查callback
是否为undefined
,然后检查它是否属于合适的类型(Function
)。
使用后想最好的解决办法原型解决方案几个星期了,我转向了你的建议,它只是更容易阅读,发现它是一个非常重要的eye 012 – ezmilhouse 2012-01-10 09:53:24
@ezmilhouse是的,有更少的“魔术”发生,因为形式参数是显而易见的:) – 2012-01-10 16:33:36
@ ezmilhouse我建议改变接受的答案,因为你提到你改变了你的方法。 – 2013-11-27 17:40:47
完美,这是主意,thx – ezmilhouse 2011-03-28 20:28:20
在这种情况下,它可能并不重要,但是,可能希望避免使用'self',因为它是全局变量(但不是保留的)。 – Shaz 2011-04-26 00:12:50