var cb = $.Callbacks(), // 定义Callbacks对象 fn1 = function(){ alert('fn1'); }, fn2 = function(){ alert('fn2'); }; cb.add( a,b ); cb.fire();
无参方式很容易处理,只要执行 add
和 fire
方法便可。测试
var cb = $.Callbacks(), // 定义Callbacks对象 fn1 = function( param ){ alert(param); }, fn2 = function(param){ alert(param); }; cb.add( a,b ); cb.fire('fn1','fn2');
这个时候你会发现,弹出了两次fn1,并非本身期待的结果,感受这里jq存在bug,测试中使用的是jq-2.1.4的版本。研究源码是发现,这个地方确实存在传参的问题,因而动手改造了一下。
第一处改造:源码:
改后的代码:
注意3099行代码的区别。spa
第二处改造:源码:
改造后的代码:code
注意3207代码的区别。对象
这两行代码改造好以后就能够正常传参了。在执行 fire 方法时,能够接受 fire('fn1','fn2',....) 或者 fire(['fn1','fn2',....]);
只是作了简单的测试,若是有其余jq功能模块有异常,欢迎你们指出来,谢谢你们blog