關於$.Callbacks()傳參問題

無參方式

var 
cb = $.Callbacks(), // 定義Callbacks對象
fn1 = function(){
    alert('fn1');
},
fn2 = function(){
    alert('fn2');
};
cb.add( a,b );
cb.fire();

無參方式很容易處理,只要執行 addfire 方法便可。測試

有參方式

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

相關文章
相關標籤/搜索