jQuery回调对象

1. $.Callbacks()模块开发目的是:给内部的$.ajax()$.Deferred()模块提供统一的基本功能组件。它可以用来作为类似基础定义的新组件的功能

2. “异步模式”一共有4种方法,这4中方法可以写出结构更合理,性能更出色,维护更方便的js代码。

①回调函数(callback):将一个函数A作为参数传递给另一个函数B,作为参数的这个A函数就是回调函数

②事件监听(Listener

③观察者模式

promise对象

3. $.Callbacks()还提供了once memory等参数用来处理

l once:确保这个回调函数只执行一次,

l memory:确保以前的值,将添加到这个列表的后面的最新的值,立即执行调用任何回调

l unique:确保一次只能添加一个回调(所以在列表list中没有重复的回调)

l stopOnFalse:当一个回调返回false时中断调用

jQuery回调模块结构

1. $.Callbacks()API列表如下:

var callbacks = $.Callbacks();

l callbacks.add();  回调列表中添加一个回调或回调的集合

例如:callbacks.add(function(){

alert("a");

})

l callbacks.remove();  从回调列表中删除一个回调或回调集合

l callbacks .fire();   用给定的参数调用所有的回调

l callbacks .fired();     访问给定的上下文和参数列表中的所有回调

l callbacks.fireWith();访问给定的上下文和参数列表中的所有回调

l callbacks .empty(); 从列表中删除所有的回调

l callbacks.disable(); 禁用回调列表中的回调

l callbacks.disabled(); 确保回调列表是否已被禁用

l callbacks.has();    确保列表中是否提供一个回调

l callbacks.lock();    锁定当前状态的回调列表

l callbacks.locked();   确保回调列表是否已被锁定

2. 通过学习观察者模式的思路,我们知道callback需要在内部维护一个list的队列数组,用于保存订阅的对象数据。同时也需要提供了addfireremove等订阅、发布、删除类似的接口。

那么我们如何把订阅的对象数据给list队列数组呢?

实现思路:构建一个存放回调的数组,如var list = [],通过闭包使这条回调数组保持存在。添加回调时,将回调pushlist,执行则遍历list执行回调

once的设计

Once的作用是确保回调列表只执行一次

源码如下:

function Callbacks(options){

var list = [];

var self;

self = {

add:function(fn){

list.push(fn)

},

fire:function(args){

if(list){

list.forEach(function(fn){

fn(args);

})

if(options === "once"){

 list = undefined;

}

}

}

}

return self;

}

memory的设计

1. memory:保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调

2. 回调函数是从异步队列Deferred分离出来的

3. memory主要用来实现deferred的异步收集与pipe管道风格的数据传输

unique的设计

1. unique:确保一次只能添加一个回调,所以在列表中没有重复的回调

2. var callbacks = Callbacks( "unique" );

callbacks.add( fn1 );

callbacks.add( fn1 ); // 重复添加

callbacks.add( fn1 );

callbacks.fire( "foo" );

结果过滤了相同的add操作。

 

stopOnFalse

1.stopOnFalse:当一个回调返回false时就中断调用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值