jQuery memory&unique&stopOnfalse
memory:保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调 (像一个递延 Deferred)。
回调函数是从异步队列Deferred分离出来的,所以很多的接口设计都是为了契合Deferred接口,memory用的很多,这个缓存的设计这里提及一下
主要是用来实现deferred的异步收集与pipe管道风格的数据传递的,具体在Deferred有详解,这里大概了解下作用范围。
memory这个有点不好理解,我们还是通过列子说明下,看下面的代码:
function fn1(val) {
console.log('fn1 says:' + val);
}
function fn2(val) {
console.log('fn2 says ' + val);
}
function fn3(val){
console.log("fn3 says " + val);
}
/* var cbs = $.Callbacks("memory");
cbs.add(fn1);
cbs.fire('foo');
console.log('..........');
cbs.add(fn2);
cbs.fire('bar');
console.log('..........');
cbs.add(fn3);
cbs.fire('aaron');*/
function callbacks(options){
var list = [];
var self;
var memory;
var firingStart;
function _fire(data){
memory = options === 'memory' && data;//===>&&>=
firingIndex = firingStart || 0;
firingStart = 0;//改变firingStart,之后的fire还是从0开始。
firingLength = list.length;
for(; list && firingIndex < firingLength; firingIndex++){
list[firingIndex](data);
}
};
self = {
add: function(fn){
var start = list.length;
list.push(fn);
if(memory){
firingStart = start;//改变firingStart
_fire(memory);
}
},
fire: function(args){
if(list){
_fire(args);
if(options === "once"){
list = undefined;
}
}
}
};
return self;
}
var cc = callbacks("memory");
cc.add(fn1);
cc.fire("111");
console.log("...............");
cc.add(fn2);
cc.fire("222");
unique:
function fn1(val) {
console.log('fn1 says:' + val);
}
function fn2(val) {
console.log('fn2 says ' + val);
}
function fn3(val){
console.log("fn3 says " + val);
}
/*var cbs = $.Callbacks("unique");
cbs.add(fn1);
cbs.add(fn1);
cbs.add(fn1);
cbs.fire('foo');
console.log('..........');*/
/*cbs.add(fn2);
cbs.fire('bar');
console.log('..........');
cbs.add(fn3);
cbs.fire('aaron');*/
function callbacks(options){
var list = [];
var self;
var memory;
var firingStart;
function _fire(data){
memory = options === 'memory' && data;//===>&&>=
firingIndex = firingStart || 0;
firingStart = 0;//改变firingStart,之后的fire还是从0开始。
firingLength = list.length;
for(; list && firingIndex < firingLength; firingIndex++){
list[firingIndex](data);
}
};
self = {
add: function(fn){
var start = list.length;
if(options === "unique"){
if(list.indexOf(fn) === -1){
list.push(fn);
}
}else{
list.push(fn);
}
if(memory){
firingStart = start;//改变firingStart
_fire(memory);
}
},
fire: function(args){
if(list){
_fire(args);
if(options === "once"){
list = undefined;
}
}
}
};
return self;
}
var cc = callbacks("unique");
cc.add(fn1);
cc.add(fn1);
cc.add(fn1);
cc.fire("111");
stopOnfalse:
function fn1(val) {
console.log('fn1 says:' + val);
return false;
}
function fn2(val) {
console.log('fn2 says ' + val);
return false;
}
function fn3(val){
console.log("fn3 says " + val);
}
/*var cbs = $.Callbacks("stopOnFalse");
cbs.add(fn1);
cbs.fire('foo');
console.log('..........');
cbs.add(fn2);
cbs.fire('bar');
console.log('..........');
cbs.add(fn3);
cbs.fire('aaron');*/
/*cbs.add(fn2);
cbs.fire('bar');
console.log('..........');
;*/
function callbacks(options){
var list = [];
var self;
var memory;
var firingStart;
function _fire(data){
memory = options === 'memory' && data;//===>&&>=
firingIndex = firingStart || 0;
firingStart = 0;//改变firingStart,之后的fire还是从0开始。
firingLength = list.length;
for(; list && firingIndex < firingLength; firingIndex++){
if(list[firingIndex](data) === false && options === 'stopOnFalse'){
break;
};
}
};
self = {
add: function(fn){
var start = list.length;
if(options === "unique"){
if(list.indexOf(fn) === -1){
list.push(fn);
}
}else{
list.push(fn);
}
if(memory){
firingStart = start;//改变firingStart
_fire(memory);
}
},
fire: function(args){
if(list){
_fire(args);
if(options === "once"){
list = undefined;
}
}
}
};
return self;
}
var cc = callbacks("stopOnFalse");
cc.add(fn1);
cc.fire("111");
cc.add(fn2);
cc.fire("222");
jQuery memory&unique&stopOnfalse的更多相关文章
- 深入jQuery中的Callbacks()
引入 初看Callbacks函数很不起眼,但仔细一瞅,发现Callbacks函数是构建jQuery大厦的无比重要的一个基石.jQuery中几乎所有有关异步的操作都会用到Callbacks函数. 为什么 ...
- jQuery.Callbacks 源码解读二
一.参数标记 /* * once: 确保回调列表仅只fire一次 * unique: 在执行add操作中,确保回调列表中不存在重复的回调 * stopOnFalse: 当执行回调返回值为false,则 ...
- jquery源码 Callback
工具方法.对函数的统一管理. jquery2.0.3版本$.Callback()部分的源码如下: // String to Object options format cache var option ...
- jquery源码解析:jQuery工具方法Callbacks详解
我们首先来讲下Callbacks是如何使用的:第一个例子 function a(){} function b(){} var cb = $.Callbacks(); cb.add(a); cb.add ...
- jquery源码01---(2880 , 3042) Callbacks : 回调对象 : 对函数的统一管理
// optionsCache : { 'once memory' : { once : true , memory : true } } var optionsCache = {}; // once ...
- jQuery 第十章 工具方法-高级方法 $.ajax() $.Callbacks() .....
$.ajax() $.Callbacks() $.Deferred() .then() $.when() ---------------------------------------------- ...
- JS搞基指南----延迟对象入门提高资料整理
JavaScript的Deferred是比较高大上的东西, 主要的应用还是主ajax的应用, 因为JS和nodeJS这几年的普及, 前端的代码越来越多, 各种回调套回调再套回调实在太让人崩溃, ...
- What skills are needed for machine learning jobs
What skills are needed for machine learning jobs?机器学习工作必须技能 原文: http://www.quora.com/Machine-Learnin ...
- jquery2.0.3 全部源码
/*! * Includes Sizzle.js 选择器,独立的库 * http://sizzlejs.com/ */ (function( window, undefined ) { //" ...
随机推荐
- JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中
JMS服务器ActiveMQ的初体验并持久化消息到MySQL数据库中 一.JMS的理解JMS(Java Message Service)是jcp组织02-03年定义了jsr914规范(http://j ...
- 【LeetCode】【C++】Linked list cycle 2
Given a linked list, return the node where the cycle begins. If there is no cycle, return null. Foll ...
- Android多线程研究(9)——读写锁
一.什么是锁 在Java的util.concurrent.locks包下有关于锁的接口和类如下: 先看一段代码: package com.codeing.snail.test; public clas ...
- Latex表格制作记录
Latex表格制作记录 主要功能 合并表格的行列 长表格的使用 makecell例程借鉴 效果图 参考代码 \documentclass{ctexart} \usepackage{indentfirs ...
- 2015第30周四Java日志组件
Java 日志 API 从功能上来说,日志 API 本身所需求的功能非常简单,只需要能够记录一段文本即可.API 的使用者在需要进行记录时,根据当前的上下文信息构造出相应的文本信息,调用 API 完成 ...
- php.ini 修改上传文件的限制
打开php.ini,首先找到file_uploads = on ;是否允许通过HTTP上传文件的开关.默认为ON即是开upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就 ...
- YUV与RGB格式转换
YUV格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式. 因此当要对图像进行后期处理显示时,需要把YUV格式转换成RGB格式. RGB与YUV的变换公式如下: YUV(25 ...
- [Angular] Providers and useFactory
// service.ts import { Injectable, Inject } from '@angular/core'; import { Http } from '@angular/htt ...
- Berkeley DB基础教程 分类: H3_NUTCH 2014-05-29 15:21 2212人阅读 评论(0) 收藏
一.Berkeley DB的介绍 (1)Berkeley DB是一个嵌入式数据库,它适合于管理海量的.简单的数据.如Google使用其来保存账户信息,Heritrix用其来保存froniter. (2 ...
- 提高编程能力的7条建议 分类: T_TALENT 2014-04-12 10:41 294人阅读 评论(0) 收藏
编程是非常酷的一件事情,但是在酷炫的背后它对很多人来说还是挺难的.很多人在学习编程之初就被困难击败了. 当你不熟悉编程的时候,你可能会觉得无从下手,并且不知道如何运用学到的知识.只要你通过了这一困难的 ...