jQuery 中提供了一个Callback的工具类Callbacks,它提供了一个Callback Chain。使用它可以在一个chain上来执行相关操作。它也是jQuery中的ajax, Deferred的基础。我们也可以使用它来构建需要异步执行的组件等。

Callbacks API说明

构造器

jQuery.Callbacks(flags) 创建Callbacks对象。

Callbacks对象里包含了一个callback function的数组(也称为 callback chain)。

method说明

add(function|functions) : 将一个或多个funcation作为一个callback function 添加到callback chain中。

remove(function|functions) :从callback chain中移除指定的callback function。

fire(arguments):触发callback chain。在执行chain中的每一个callbakc function时,参数都是一样的。

fireWith(context,arguments): 在context下执行callback chain。

disable(): 禁用Callbacks。其实是将chain设置为undefined。所以在禁用后,add()是添加不成功的,那么fire时也就不会有什么操作了。

empty():只是将chain内容清空。

构造器参数

flags:

·unique chain中的funcation是不能重复的。如果重复添加时,是添加不了的。生效于添加阶段(也就是在add函数中使用)。

·once 是整个链中的每一个callback function都要被执行一次,并且只执行一次。

·memory 保留上一次fire时的参数,并记录上一次fire时执行到第n个callback function。在下一次fire时,先将上一次未执行的(包括上一次之后,又新加的callback)执行完毕,然后才开启新一轮执行。

·stopOnFalse 执行一个callback时判断执行结果是否为false,如果是false的话就停止不在执行。

重要流程

Add一个函数的流程

1)如果有unique标志,判断要添加的是否存在,只在不存在时添加到chain中。

2)如果没有unique标志,代表可以重复。直接添加到chain中。

Fire的流程:

1)设置context

如果没有指定context,那么context值是 Callbacks对象。

2)将chain中未执行的functions执行一遍。在此过程中,每执行完一个就会基于stopOnFalse来进行判断(如果设置的话)

3)后置处理

  如果Callbacks可以多次执行:

  如果还有没有执行的参数,再次执行。

  否则:(只能执行一次)

    如果被stopOnFalse了,执行disable()。

  否则:执行empty

Demo

<script src="https://code.jquery.com/jquery-1.7.2.js" integrity="sha256-FxfqH96M63WENBok78hchTCDxmChGFlo+/lFIPcZPeI="   crossorigin="anonymous"></script>

<script type="text/javascript">

$(function(){

function fn1(value){

console.log(arguments.length,value);

}

function fn2(value){

return "fn2, " + value;

}

function fn3(value){

fn1(fn2(value));

}

debugger;

var callbacks = jQuery.Callbacks("once memory");

callbacks.add(fn1,fn2,fn3);

callbacks.fire("hello_0")

console.log("--------1-------")

callbacks.add([fn1,fn3]);

callbacks.add(fn2);

callbacks.add(fn3);

callbacks.fire("hello_1");

});

</script>

jQuery: Callbacks的更多相关文章

  1. jQuery.Callbacks之demo

    jQuery.Callbacks是jquery在1.7版本之后加入的,是从1.6版中的_Deferred对象中抽离的,主要用来进行函数队列的add.remove.fire.lock等操作,并提供onc ...

  2. jQuery回调、递延对象总结(上篇)—— jQuery.Callbacks

    前言: 作为参数传递给另一个函数执行的函数我们称为回调函数,那么该回调又是否是异步的呢,何谓异步,如:作为事件处理器,或作为参数传递给 (setTimeout,setInterval)这样的异步函数, ...

  3. jQuery.Callbacks 源码解读二

    一.参数标记 /* * once: 确保回调列表仅只fire一次 * unique: 在执行add操作中,确保回调列表中不存在重复的回调 * stopOnFalse: 当执行回调返回值为false,则 ...

  4. jQuery源代码学习之四——jQuery.callbacks

    自己实现的callbacks模块相较于jquery源代码中的callbacks模块有所简化,表面上看没有考虑firing这个参数,没有对之进行任何处理,即没有考虑在函数执行过程中,再次调用add,re ...

  5. jQuery.Callbacks之源码解读

    在上一篇jQuery.Callbacks之demo主要说了Callbacks对象初始化常见的选项,这一篇主要分析下Callbacks对象的源代码,对给出两个较为繁琐的demo // String to ...

  6. jQuery回调、递延对象总结(一)jQuery.Callbacks详解

    前言: 作为参数传递给另一个函数执行的函数我们称为回调函数,那么该回调又是否是异步的呢,何谓异步,如:作为事件处理器,或作为参数传递给 (setTimeout,setInterval)这样的异步函数, ...

  7. jQuery.callbacks 注释

    (function( jQuery ) { // String to Object flags format cache var flagsCache = {}; // Convert String- ...

  8. jquery.Callbacks的实现

    前言 本人是一个热爱前端的菜鸟,一直喜欢学习js原生,对于jq这种js库,比较喜欢理解他的实现,虽然自己能力有限,水平很低,但是勉勉强强也算是能够懂一点吧,对于jq源码解读系列,博客园里有很多,推荐大 ...

  9. jQuery 2.0.3 源码分析 回调对象 - Callbacks

    源码API:http://api.jquery.com/jQuery.Callbacks/ jQuery.Callbacks()是在版本1.7中新加入的.它是一个多用途的回调函数列表对象,提供了一种强 ...

随机推荐

  1. org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML.问题思路

    15:36:34,549 WARN DefaultListableBeanFactory:1416 - Bean creation exception on FactoryBean type chec ...

  2. 6.26学习 异步委托回调函数 VS 多线程 VS 并行处理

    描述: 我现在是轮询着构建实例,然后这个实例去执行一个方法,但是执行方法需要大约10s时间,全部轮询下来需要很长时间.所以我现在要更改,头给了我两个方法,1多线程 2异步委托回调函数. 异步委托回调函 ...

  3. 使用jmeter进行批量数据创建

    背景: 测试环境需要创建大量的测试数据,进行功能和性能的测试 测试数据创建接口是HTTP请求方式 测试数据要求不同类型的数据,要有字段进行关联,且单据的编号在DB中唯一不可重复,此外测试数据的时间类参 ...

  4. selenium、python、firefox版本配合无敌

     selenium (2.53.6) .python2.7.13. firefox46.0.1 完美

  5. 使用 Palette 让你的 UI 色彩与内容更贴合

    版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有. 每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章. 未经允许,不得转载. 一.前言 今天介绍一个 An ...

  6. 近期学习的原生JS知识以及jQuery框架

    [正则表达式]1.正则表达式包括两部分: ① 定义正则表达式的规则 ② 定义正则表达式的模式(i/g/m)2.声明正则表达式: ① 字面声明 : var reg = /表达式规则/表达式模式 ② 使用 ...

  7. mysql:Linux系统下mysql5.6的安装卸载

    1.1. 下载rpm包 要使用yum 安装mysql,需要mysql的yum仓库,先从官网下载适合你系统的仓库 http://dev.mysql.com/downloads/repo/yum/ 我的是 ...

  8. windows 下 Mutex和Critical Section 区别和使用

    Mutex和Critical Section都是主要用于限制多线程(Multithread)对全局或共享的变量.对象或内存空间的访问.下面是其主要的异同点(不同的地方用黑色表示). Mutex Cri ...

  9. 集美大学网络1413第十二次作业成绩(个人作业3) -- Alpha阶段个人总结

    题目 个人作业3--个人总结(Alpha阶段) 优秀作业链接:**068 未交:**087 个人作业3成绩 学号 姓名 总结(4) 5个问题(2.5) 自我评价(2.5) 博客互动 (1) 总分(10 ...

  10. 团队作业8——Beta 阶段冲刺7th day

    一.当天站立式会议 二.每个人的工作 (1)昨天已完成的工作(具体在表格中) 完善支付功能 (2)今天计划完成的工作(具体如下) 测试与正式发布 (3) 工作中遇到的困难(在表格中) 成员 昨天已完成 ...