用法
- 觀察者模式: 添加完後統一觸發。
function aaa(){
alert(1);
}
function bbb(){
alert(2);
}
var cb= $.Callbacks();
cb.add(aaa);
cb.add(bbb);
cb.fire();
- 好處,應用場景。
要統一的管理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幾次就觸發幾次。
- once:fire只能觸發一次,源碼中fire後如果有once就把list幹掉了,list=undefined了。
- 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);
- unique:去重
- 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