实现一个EventEmitter类
class EventEmitter {
constructor() {
this._events = {}
}
on(eventName,callback) {
let callbacks = eventName in this._events ? this._events[eventName] : [];
callbacks.push(callback)
this._events[eventName] = callbacks
}
emit(eventName,...args) {
const callbacks = this._events[eventName]
callbacks.map(cb => {
cb(...args)
})
}
off(eventName, callback) {
if (!eventName in this._events) return
let callbacks = this._events[eventName]
let index = callbacks.indexOf(callback)
callbacks.splice(index, 1)
}
}
const emitter = new EventEmitter()
const sayHi = (name) => console.log(`Hello ${name}`)
emitter.on('hi', sayHi)
emitter.emit('hi', 'nwd')
emitter.off('hi', sayHi)
emitter.emit('hi', '您好')