异步的 js 接口

	Function.prototype.bindAs = function(operator){
		var me = this;
		return function(){
			var args = [me].concat([].slice.call(arguments, 0));
			return operator.apply(null, args);
		};
	};

	var createFuse = function(){
		var queue, fn, infire;
		queue = [];
		fn = function(process){
			var args = [].slice.call(arguments, 1);
			if(infire)
				process.apply(null, args);
			else
				queue.push(function(){
					process.apply(null, args);
				});
		};
		fn.fire = function(){
			while(queue.length)
				queue.shift()();
			infire = true;
		};
		return fn;
	};

	// 导火线模型的应用部分,从这里看起
	var swfReady = createFuse(); // 创建一根导火线(在实际的复杂项目中,可根据需要任意创建多个)

	var store = {
		set: function(name, value){
			window.alert(["set", name, value]);
		}.bindAs(swfReady), // 把 set 接口挂到导火线上

		get: function(name){
			// TODO:
		},

		remove: function(name){
			window.alert(["remove", name]);
		}.bindAs(swfReady) // 把 remove 接口也挂到导火线上
	};

	// 这里模拟用户的一堆随意调用
	store.set("name", "dron");
	store.set("sex", "boy");
	store.remove("sex");
	store.set("age", 18);

	setTimeout(function(){ // 这里延迟两秒,模拟 flash 加载完成
		swfReady.fire(); // 由 flash 加载完成触发的导火线点火,这一步,你将看到上边一堆 set,remove 的效果了(alert)
		store.set("sex", "girl"); // 这一句,说明了被挂到导火线上的接口,在点火完成后,仍然可以工作,当然不需要再次点火
	}, 2000);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值