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