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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章