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)));}}}
