const eventBus = {
// 创建一个订阅对象
arrays: {},
// 添加订阅
on: function(type, fn) {
this.arrays[type] = this.arrays[type] || []
let flag = true
for(let i = 0; i < this.arrays[type].length; i++) {
if(this.arrays[type][i] === fn) {
flag = false
break;
}
}
if(flag) this.arrays[type].push(fn)
},
// 发布订阅过的方法
emit: function(type, ...args) {
this.arrays[type] = this.arrays[type] || []
if(this.arrays[type].length) {
this.arrays[type].forEach(callback => {
callback(...args)
})
}
},
// 取消订阅
off: function(type, fn) {
let args = Array.from(arguments)
if(args.length === 0) { // 取消所有订阅方法
手写一个基于发布订阅模式的简单js事件
于 2022-03-16 10:44:06 首次发布