用法
- 观察者模式: 添加完后统一触发。
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