EventEmitter是什么
EventEmitter本质上是一个观察者模式的实现,所谓观察者模式。
正常包含两个基本实现, 观察者emit
和被监听者on
,
简单实现
class EventEmitter {
constructor() {
if(!this.handles) {
this.handles = Object.create(null);
}
}
on(evt, cb) {
if(!this.handles[evt]) {
this.handles[evt] = [];
}
this.handles[evt].push(cb);
}
emit(evt, ...arg) {
if(!!this.handles[evt]) {
this.handles[evt].forEach((item, i) => {
if(typeof item === 'function') {
Reflect.apply(item, this, arg);
} else {
return console.error(`${item} is not a function in [${i}]`)
}
})
}
}
}