代码
class EventBus {
constructor(name = 'EventBus') {
this.name = name
this._events = this._events || new Object()
}
on(eventName, callback) {
if (!this._events[eventName]) {
this._events[eventName] = [callback]
} else {
this._events[eventName].push(callback)
}
}
once(eventName, callback) {
let once = (...args) => {
this.off(eventName)
callback(...args)
}
this.on(eventName, once)
}
off(eventName) {
if (this._events[eventName]) {
delete this._events[eventName]
console.log(`${eventName}<==销毁`)
}
}
emit(eventName, ...args) {
if (this._events[eventName]) {
this._events[eventName].forEach(callback => {
callback([...args]);
})
} else {
console.error(`${eventName}<==绑定事件不存在或已经销毁`)
}
}
}
let emiter = new EventBus()
emiter.on('test', args => {
console.log(args);
})
emiter.on('test', args => {
console.log(args.join());
})
emiter.on('test1', args => {
console.log(args.join());
})
emiter.emit('test', 11, 11, 11)
emiter.off('test')
emiter.emit('test', 11, 12, 31)
注意事项
使用场景