您的位置:首页 > Web前端 > JQuery

JQuery源码解析---jQuery回调对象

2016-09-19 15:16 363 查看
//jquery回调对象

jquery.Callbacks一般开发者接触的很少的,虽然jQuery开发者提供了外部接口调用,但是$.Callbacks()模块的开发目的是为了给内部$.ajax()和$.Deferred()模板提供统一的基本功能组件。

它可以用来作为类似基础定义的新组件的功能。

jQuery.Callbacks是jquery在1.7版本之后加入的,是从1.6版本中的_Deferred对象中抽离出来的,主要用来进行函数队列的add、reomve、fire、lock等操作,并提供了once,memory,unique,stopOnFalse四个option进行一些特殊的控制。
这个函数最常见的应用场景就是事件触发机制,也就是设计模式中的观察者模式的发布、订阅机制,目前Callbacks对象用于queue、ajax、Deferred对象中,本小节主要是一些简单的例子去理解的使用。

example:
function fn1(value){
console.log("fn1 says"+value);
}

function fn2(value){
console.log("fn2 says"+value);
}

var callbacks = $.Callbacks();
callbacks.add(fn1);
callbacks.fire("liu");
callbacks.add(fn2);
callbacks.fire("liu");上面例子中,我们使用了$.Callbacks()的两个方法:add()和fire().add()支持添加新的回调列表,而fire()提供了一种用于处理在同一列表中的回调方法的途径。

另外一个方法是$.Callbacks()的remove()方法,用于从回调列表中删除一个特定的回调。

不难发现jQuery.Callbacks还提供“once memory”等参数用来处理:

   ☑  once: 确保这个回调列表只执行( .fire() )一次(像一个递延 Deferred)。

   ☑  memory: 保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调 (像一个递延 Deferred)。

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

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

var callbacks = $.Callbacks('once');

callbacks.add(function() {
alert('a');
})

callbacks.add(function() {
alert('b');
})

callbacks.fire(); //输出结果: 'a' 'b'
callbacks.fire(); //未执行


once的作用是使callback队列只执行一次。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: