jQuery中回调函数的原理及实现上

//测试Chrome版本  40.0.2214.115 m

//如有错误欢迎指出

//http://ezizoo.iteye.com/blog/2204215
//由上一次写的数组总结(上面地址是数组总结)
//写一个数组的应用

//就是jquery中回调函数Callbacks的实现

//实现分以下两部分
//第一个:没有onece,memory,unique,stopOnFalse
//第二个:加上onece,memory,unique,stopOnFalse

//第一步的实现原理 
//第一:将函数依次放进数组里
//第二:将函数依次的遍历出来并且执行
//第三:实现两点,要对arguments与call,apply,三个要有一定的理解
//下面开始代码

var Callbacks=function(){
	var 
		i,
		list=[],
		//定义一个函数,将数组全部执行一次
		fire=function(){
			for(i=0;i<list.length;i++){
				list[i].call(arguments[0]);
			}
		},
		self={
			add:function(){
				//对传进来的参数进行解析
				for(i=0;i<arguments.length;i++){
					if(typeof(arguments[i])==="function"){
						list[i]=arguments[i];
					}
				}
			},
			fire:function(){
				fire(this);
				return this;
			}
		};
	return self;//此函数返回的对象是self
};

function aa(){
	alert("aa");
}

function bb(){
	alert("bb");
}

var cb=new Callbacks();
cb.add(aa,bb);
cb.fire();


//对self对象中的add方法进行改进
//自执行函数
var Callbacks=function(){
	var 
		i,
		list=[],
		//定义一个函数,将数组全部执行一次
		fire=function(){
			for(i=0;i<list.length;i++){
				//list[i]();
				//alert(this);
				list[i].call(arguments[0]);
			}
		},
		self={
			add:function(){
				(function add(args){
					//对传进来的参数进行解析
					//以后可使用each遍历
					for(i=0;i<args.length;i++){
						if(typeof(args[i])==="function"){
							//list[i]=arguments[i]; 
							list.push(args[i]);
						}
					}
				})(arguments);
				return this;
			},
			fire:function(){
				fire(this);
				return this;
			}
		};
	return self;
};
//到此结束

 

 

你可能感兴趣的:(jquery,数组,Callbacks)