JS手动实现发订阅布模式MyEventBus
1. 创建发布订阅类
class MyEventBus {
constructor () {
this.event = { }
}
on (eventName, fun) {
if (this.event[eventName]) {
this.event[eventName].push(fun)
} else {
this.event[eventName] = [fun]
}
}
emit (eventName, parameter) {
if (this.event[eventName]) {
this.event[eventName].map(item => {
item(parameter)
})
}
}
remove (eventName, fun) {
let fnList = this.event[eventName]
if (!fnList) return
if (!fun) {
fnList.length = 0
} else {
for (let i = 0; i < fnList.length; i++) {
if (fnList[i] === fun) {
fnList.splice(i, 1)
}
}
}
}
}
export default MyEventBus
2. 使用的地方引入此类
import MyEventBus from './myEventBus'
let myEventBus = new MyEventBus()
myEventBus.on('test', (params) => {
console.log('订阅1', params)
})
myEventBus.emit('test', '测试参数')