//memory的设计
memory:包吃以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调。
回调函数是从异步队列Deferred分离出来的,所以很多的接口设计是为了契合Deferred接口,memory用的很多,这个缓存的设计这里提及一下主要是用来实现Deferred的异步收集与pipe管道风格的数据传递的,具体在Deferred有详解,这里大概了解一下作用范围。
memory设计需要解决的问题是:
(1)如何保持上一个参数
(2)add后如何执行
私有变量memory缓存这上一个参数的属性,我们靠firingStart用来定位通过add增加的回到数据的索引。在遍历的时候
直接通过firingStart的起使索引定位,然后传递memory的参数,而且实现这种"保持以前的值"的设计。
memory:包吃以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调。
回调函数是从异步队列Deferred分离出来的,所以很多的接口设计是为了契合Deferred接口,memory用的很多,这个缓存的设计这里提及一下主要是用来实现Deferred的异步收集与pipe管道风格的数据传递的,具体在Deferred有详解,这里大概了解一下作用范围。
memory设计需要解决的问题是:
(1)如何保持上一个参数
(2)add后如何执行
代码模拟实现:
function Callbacks(options){
var list = [];
var self;
var firingStart;
var memory;
function _fire(data){
memory = options ==='memory'&&data;
firingIndex = firingStart||0;
firingStart = 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;
_fire(memory);
}
},
fire:function(args){
}
}
return self;
}
私有变量memory缓存这上一个参数的属性,我们靠firingStart用来定位通过add增加的回到数据的索引。在遍历的时候
直接通过firingStart的起使索引定位,然后传递memory的参数,而且实现这种"保持以前的值"的设计。