function Emitter(){
this._listener=[];
}
//绑定事件
Emitter.prototype.bind=function(eventName,callback){
var listener=this._listener[eventName]||[]
listener.push(callback);
this._listener[eventName]=listener;
}
//绑定触发一次事件
Emitter.prototype.once = function (eventName, callback){
function wrapper () {
this.off(eventName);
callback.apply(this, arguments);
}
this.bind(eventName, wrapper);
};
//触发事件
Emitter.prototype.trigger=function(eventName){
var args=Array.prototype.slice.call(arguments,1)
var listener=this._listener[eventName];
if(!Array.isArray(listener)) return;
listener.forEach(function(callback){
try{
callback.apply(this,args)
}
catch(e){
console.log(e)
}
})
}
//取消事件绑定
Emitter.prototype.off = function(eventName){
this._listener[eventName] = [];
}
//调用
var emitter=new Emitter();
emitter.bind('myevent',function(arg1,arg2){
console.log(arg1,arg2);
})
emitter.bind('myevent',function(arg1,arg2){
console.log(arg2,arg1);
})
emitter.trigger('myevent','a','b')
JavaScript实现事件原型
最新推荐文章于 2021-09-02 23:59:06 发布