class pubSub {
constructor() {
// 存储所有事件和对应的回调函数
this.events = {}
}
// 订阅
subscribe(eventName, callback) {
// 如果不存在则创建
if (!this.events[eventName]) {
this.events[eventName] = []
}
this.events[eventName].push(callback)
}
// 取消订阅
unSubscripe(eventName, callback) {
// 如果存在该事件
if (this.events[eventName]) {
// 如果存在该回调函数,则删除它
let index = this.events[eventName].indexOf(callback)
if (index !== -1) {
this.events[eventName].splice(index, 1)
}
}
}
// 发布
publish(eventName, data) {
if (this.events[eventName]) {
this.events[eventName].forEach(callback => {
callback(data)
})
}
}
}
let events = new pubSub()
// 订阅事件
events.subscribe('myYu', (data) => {
console.log('订阅', data)
})
// 发布事件
events.publish('myYu', 'hello,yujian')
// 取消订阅
events.unSubscripe('myYu', (data) => {
console.log('取消订阅', data)
})
// 再次发布事件,不会有任何输出,因为已经取消订阅了
events.publish('myEvent', 'Hello, yujian!');