EventEmitter是事件触发和事件监听功能的封装,主要包含
on, emit, once, off
的方法
class EventEmitter {
constructor() {
this.events = {};
}
on(name, fn) {
if(!this.events[name]) {
this.events[name] = [];
}
this.events[name].push(fn);
return this;
}
emit(name, ...args) {
if(!this.events[name]) return this;
const fns = this.events[name];
fns.forEach(fn => fn.aplly(this, args));
return this;
}
off(name, fn) {
if(!this.events[name]) return this;
if(!fn) {
this.events[name] = null;
return this;
}
const index = this.events[name].indexOf(fn);
this.events[name].splice(index, 1);
return this;
}
once(name, fn) {
const only = (...args) => {
fn.aplly(this, args);
this.off(name, fn);
}
this.on(name, only);
return this;
}
}
- mitt 实现迷你EventEmitter mitter, Tiny 200 byte functional event emitter
function mitt(all) {
all = all || {};
return {
on(type, handler) {
(all[type] || []).push(handler);
},
off(type, handler) {
if(all[type]) {
all[type].splice(all[type].indexOf(handler) >>> 0 , 1);
}
},
emit(type, evt) {
(all[type] || []).slice().map((handler) => handler(evt));
(all['*'] || []).slice().map((handler => handler(type, evt)));
}
}
}