实现一个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', '您好')
作者:李赫feixuan
链接:https://juejin.im/post/5b39e42be51d4558c329ebc5
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。