jquery的回调对像Callbacks

      我们在日常开发中很少会用到Callbacks,但是我为什么会这么急着介绍Callbacks呢,因为接下我想说一下promise,这两部分有密切的联系至于什么联系到介绍promise时我们会明白的。

Callbacks它是一个多用途的回调函数列表对象,提供了一种强大的方法来管理回调函数队列。如下例子

function fn1(){
  alert(111)
}

function fn2(){
  alert(222)
}

var callBack = $.Callbacks();

callBack.add(fn1);

callback.add(fn2);

callback.fire();

 

    Callbacks它有四个可能的参数:once、memory、unique、stopOnFalse。当然也可以用数组的形式把四个都传入。once是不论几次调用fire队列里的函数只调用一次,memory是在fire之后再用add添加函数函数也会执行的,unique一个函数添加几次fire里只执行一次,stopOnFase函数retufn false里会中断执行。

可以看官网demo

我们来看源码

jquery的回调对像Callbacks_第1张图片

    这个工具方法里最重要的两个函数就是add和fire而fire是调用一名子是fire的私有方法实现的,所以我们只看add和fire

   jquery的回调对像Callbacks_第2张图片

  • 通过判断参数是函数还是数组把传进来的参数在没有unique参数或都函数不在list数组中时放进list数组
  • 这里memory参数为ture里会自动调用私有fire方法,什么时候memory会为true呢?在私有fire方法的第一句可以看到memory = options.memory && data;这就实现了加memory参数时为什么会有记忆功能了,jquery的设计是不是很巧妙呢。

   接下来我们看一下私有fire方法

jquery的回调对像Callbacks_第3张图片

  • fire就是遍历list数组执行list里的函数顺便再把参数传递到要执行的函数里
  • stack存的是fireing期间再次fire的参数这里再重新执行一下如下代码
写道
var callBack = $.Callbacks();

function fn1(){
   alert(111)
   callback.fire()
}

function fn2(){
   alert(222)
}

callBack.add(fn1);

callback.add(fn2);

callback.fire();

 

 

   到这里我们是不是已经看出这个是什么模式,是不是观察者模式啊。

你可能感兴趣的:(jquery,Callbacks)