jquery中$.Callback的解析认识

1 篇文章 0 订阅

用法

  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
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值