event 发表于 01/02/2019 | 分类于 笔记 事件 demo 12345678910111213141516171819202122232425262728293031323334353637383940414243class EventEmitter { constructor() { this._events = new Map() } addListener(type, fn) { const handler = this._events.get(type) if (!handler) { this._events.set(type, fn) } else if (handler && typeof handler === 'function') { this._events.set(type, [handler, fn]) } else { handler.push(fn) } } emit(type, ...args) { let handler = this._events.get(type) if (Array.isArray(handler)) { for (let i = 0; i < handler.length; i++) { if (!!args.length) { handler[i].apply(this, args) } else { handler[i].call(this) } } } else { if (!!args.length) { handler.apply(this, args) } else { handler.call(this) } } return true }}let emitter = new EventEmitter()emitter.addListener('say', (what) => { console.log(`say ${what}`)})emitter.addListener('say', (what) => { console.log(`say ${what} too`)})emitter.emit('say', 'hello')