首页 > 语言 > JavaScript > 正文

jQuery.Callbacks()回调函数队列用法详解

2024-05-06 14:56:13
字体:
来源:转载
供稿:网友

本文实例讲述了jQuery.Callbacks()回调函数队列用法。分享给大家供大家参考,具体如下:

1、jQuery.Callbacks

The jQuery.Callbacks() function, introduced in version 1.7, returns a multi-purpose object that provides a powerful way to manage callback lists. It supports adding, removing, firing, and disabling callbacks.

The $.Callbacks() function is internally used to provide the base functionality behind the jQuery $.ajax() and $.Deferred() components. It can be used as a similar base to define functionality for new components.

接下来,我们分别看下四个标准的控制标志。

1.1 once

创建的 callbacks 对象只允许被 fireWith() 一次 [注意:方法fire() 是 fireWith() 的外观模式]。

var callbacks = $.Callbacks("once");callbacks.add(function(){console.log("f1");});callbacks.fire(); //输出 "f1"callbacks.fire(); //什么也不发生,在源码中已经禁用了 list.disable()

1.2 memory

在调用 add() 方法时,如果这时 callbacks队列 满足 fired && firing = false(真执行完毕) && memory(需要在构造函数指定),那么add() 进去的回调函数会立即执行,而这个 add 进去的回调函数调用时的参数存储在 memory 变量中。memory 变量用于存储最后一次调用 callbacks.fireWith(...) 时所使用的参数 [context, arguments]。

If the Callbacks object is created with the "memory" flag as its argument, additional functions may be added and fired after the callback list is locked.

$(function($){    var callbacks = $.Callbacks("memory");    callbacks.add(function(){console.log("f1");});    callbacks.fire(); //输出 "f1",这时函数列表已经执行完毕!    callbacks.add(function(){console.log("f2");});  //memory作用在这里,没有fire,一样有结果: f2    callbacks.fire(); //重新触发一次,输出 f1 f2。 firingStart = 0    //与once一起使用    callbacks = $.Callbacks("once memory");    callbacks.add(function(){console.log("f3");});    callbacks.fire(); //输出 "f3",这时函数列表已经执行完毕!    callbacks.add(function(){console.log("f4");});      //没有fire,一样有结果: f4    callbacks.fire(); //由于为"once",这里将什么也不执行});

1.3 unique

回调函数列表中的函数是否可以重复,该特性与 add() 方法有关,可以避免在回调函数列表中加入多个相同回调函数。

var f1 = function(){console.log("f1");};var callbacks = $.Callbacks();callbacks.add(f1);callbacks.add(f1);callbacks.fire(); //输出 f1 f1//传递参数 "unique"callbacks = $.Callbacks("unique");callbacks.add(f1); //有效callbacks.add(f1); //添加不进去callbacks.fire(); //输出: f1

1.4 stopOnFalse

默认情况下,当执行 fireWith() 方法时,整个回调函数列表中的所有函数都会顺序执行,但如果设置了stopOnFalse,那么当某个函数返回false时,后边的函数将不再执行。即使设置了memory,再次添加的函数也不会执行了,即一旦某个函数返回 false 的情况下,会禁用 memory 功能。但如果没设置”once”,再次调用fire可以重新触发该callbacks。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选