3.Callbacks

Callbacks还是很重要的,deferred对象是依赖callbacks的,而ajax的实现依赖deferred

参考
http://www.cnblogs.com/chaojidan/p/4165818.html

这篇文章里的注释很详细,但是自己的看的时候还是要集中注意力,而且自己要写写例子进行测试,记录一下自己觉得比较重要的地方

##Callbacks包含如下几个比较重要的变量:

  1. 一个list,真正的事件序列
  2. 一个stack,用来兼容事件fire过程中,突然又有fire被触发的情况,这时候需要再次触发的事件就放在stack里面,不会放进list里,用了once就没有stack
  3. 一个self对象,调用$.Callbacks返回的对象
  4. 一个fire函数,真正的触发回调的函数

##self里面比较重要的几个函数:

  1. add,用来添加事件,add里面有个自执行函数也叫add,自执行函数后面有个if…else if,是处理memory的地方,memory是不进入stack的,而是直接fire,
  2. remove,删除事件,
  3. disable,停止整个Callbacks,之前add的内容全部清除,后面再add也没用了,
  4. fire和fireWith,容易和外层的fire弄混,其实这两个只是调用外层的fire,往stack里面添加事件的操作就在fireWith里面,

##比较重要的几条逻辑:

  1. createOptions把调用$.Callbacks时传入的参数转换成{once:true}这样的形式,方便后面处理
  2. 第一次add的时候,往list里面添加事件,然后fire了,这时如果使用了memory,在fire之后再调用add,是不会操作list的,而是直接触发fire
  3. fire过程中,如果又有fire事件发生,会存在stack里面,不会操作list,但是注意参考文章里面的那种写法,在add的函数里有一个fire,那是不行的,那种写法会导致stack在list执行的时候又被push进去一次,于是就一直在fire函数里嵌套执行,直到超过栈的上限
var cb = jQuery.Callbacks();

function a(){
    cb.fire();// 不可以这样写
}
function b(){
}

cb.add(a,b);
cb.fire();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值