jquery中$.Callback的解析認識

用法

  1. 觀察者模式: 添加完後統一觸發。
function aaa(){
    alert(1);
}
function bbb(){
    alert(2);
}
var cb= $.Callbacks();
cb.add(aaa);
cb.add(bbb);
cb.fire();
  1. 好處,應用場景。
    要統一的管理aaa和bbb。有時候如下,很難對不同作用域下的函數進行統一管理。
function aaa(){
    alert(1);
}
(function(){
    function bbb(){
        alert(2);
    }
})();
aaa();
bbb();

只能彈出1,因爲bbb是局部作用域中的。

var cb= $.Callbacks();
function aaa(){
    alert(1);
}
cb.add(aaa);
(function(){
    function bbb(){
        alert(2);
    }
    cb.add(bbb);
})();
cb.fire();

對應複雜情況很有用。統一管理,通過fire統一觸發。

原理

Callback接收一個參數,可以有4個選項,once,memory,unique,stopOnFalse。

self單體有這些方法:add,remove,has,empty,disable,disabled,lock,locked, fireWith,fire,fired。

list=[]數組變量,用來收集回調函數。fire的時候對其循環調用。

  • add:push數組
  • fire:調用fireWith,fireWith允許傳參,fire可傳可不傳。
  • fireWith:調用私有函數fire,在私有函數fire中for循環list。
  • remove:splice數組。

4個參數:

  • once針對fire()只循環一次
  • memory 針對add,作用到add上,add時判斷有memory就去執行fire。
  • unique 針對add,添加的時候就可以去重
  • stopOnFalse 針對fire,在for循環時遇到false,立即跳出循環

更多用法

callback4個參數的作用
  • once: 只能夠觸發一次。
  • memory: 當隊列已經觸發之後,再添加進來的函數就會直接被調用,不需要再觸發一次。
  • unique: 保證函數的唯一
  • stopOnFalse: 只要有一個回調返回 false,就中斷後續的調用。

不傳參數,fire幾次就觸發幾次。

  1. once:fire只能觸發一次,源碼中fire後如果有once就把list幹掉了,list=undefined了。
  2. memory記憶,在fire前面後面add的方法都能得到執行。
function aaa() {
    alert(1);
}

function bbb() {
    alert(2);
}
var cb = $.Callbacks('memory');
cb.add(aaa);
cb.fire(); //1 2
cb.add(bbb);  
  1. unique:去重
  2. stopOnFalse:函數返回false跳出循環
callback也可以接收組合的形式
function aaa() {
    alert(1);
}
function bbb() {
    alert(2);
}
//組合使用,只執行一次,並且彈出1 2
var cb = $.Callbacks('once memory');
cb.add(aaa);
cb.fire(); //1
cb.add(bbb);
cb.fire();
fire()可以傳參
function aaa(n) {
    alert("aaa "+n);
}
function bbb(n) {
    alert("bbb "+n);
}
var cb = $.Callbacks();
cb.add(aaa);
cb.add(bbb);
//fire傳參
cb.fire("hello"); //彈出aaa hello 和bbb hello
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章