JS实现事件模型

Posted by yuk on 2016-05-09

源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
var Emitter=function(){
this._listeners={};
};
//注册事件
Emitter.prototype.on=function(eventName,callback){
var listeners=this._listeners[eventName]||[];
listeners.push(callback);
this._listeners[eventName]=listeners;
}
//触发事件
Emitter.prototype.emit=function(eventName){
var args=Array.prototype.slice.apply(arguments).slice(1),
listeners=this._listeners[eventName],
self=this;
if(!Array.isArray(listeners))return;

listeners.forEach(function(callback){
try{
callback.apply(this,args);
}catch(e){
console.error(e);
}
});
}
//实例
var emitter=new Emitter();

emitter.on('event',function(arg1,arg2){
console.log('get event',arg1,arg2);
})

console.log('emit event');
emitter.emit('event','arg1','arg2');