关于 在js中的对象事件管理

var event = function(func) {

		var data = [];
	
		var retFunc = func;
	
		var ret = function(func, bool) {
	
			if(typeof func === "function" && !bool) {
	
				data.push(func);
	
				func.remove = function() {
					data.splice(data.indexOf(func), 1);
					return this;
				}
				func.setIndex = function(index) {
					this.index = index;
					return this;
				}
				func.index = 0;
	
				ret.onaddFunction && ret.onaddFunction(func);
	
				return func;
	
			}
	
			retFunc && retFunc.apply(this, arguments);
	
			data.sort(function(a, b) {
				return a.index < b.index
			});
	
			for(var i = 0; i < data.length; i++) {
	
				var it = data[i];
	
				it && (it.apply(this, arguments) === 'remove') && it.remove();
	
				ret.ontrigger && ret.ontrigger(it);
	
				if(data.indexOf(it) == -1) --i;
	
			};
	
		}
	
		ret.remove = function() {
			data = [];
		};
	
		ret.getFunction = function() {
			return data;
		}
	
		ret.onaddFunction = null;
		ret.ontrigger = null;
	
		return ret;
	
	}



	//创建对象
	var ob = function() {   //创建加载完成事件
		  
		this.onclick = new event();   //模拟被点击
		  
		this.click = function() {     //触发点击事件
			    
			this.onclick({
				data: "传参数据"
			});  
		}
	}
	
	var _ob = new ob();
	//绑定_ob被点击事件
	var ev = _ob.onclick(function(e) {  
		debugger;   //e = {data:"传参数据"}
	
		  
		return 'remove'; //只运行当前一次
	})

	//ev.remove(); //取消绑定

  

posted @ 2017-10-11 15:55  blurs  阅读(102)  评论(0编辑  收藏  举报