function Emitter(){
this._listener = {}
}
Emitter.prototype.bind = function(eventName,callback){
var event = this._listener[eventName] || [];
event.push(callback);
this._listener[eventName] = event;
}
Emitter.prototype.trigger = function(eventName){
if(!this._listener.hasOwnProperty(eventName)){
console.log('you do not bind this event');
return;
}
var args = Array.prototype.slice.apply(arguments).slice(1);
var event = this._listener[eventName];
if(!Array.isArray(event)) return;
event.forEach(function(callback){
try{
callback.apply(this,args)
}catch(e){
console.log(error(e))
}
})
}
Emitter.prototype.unbind = function(eventName,callback){
this._listener.hasOwnProperty(eventName) && delete this._listener[eventName];
callback && callback();
}
var em = new Emitter();
em.bind('test',function(a,b){
console.log(a);
console.log(b);
});
em.trigger('test',1,2)
em.unbind('test',function(){console.log('unbind')})
em.trigger('test',1,2)
欢迎分享本文,转载请保留出处:前端ABC » js事件模型bind、unbind、trigger实现
前端ABC