js实现简单的发布订阅模式

// 发布订阅Pub/Sub
class EventBus {
  constructor() {
    // 1.处理事件对应的处理函数
    this.sub = {}
  }
  $on(event,fn) {
    if(!this.sub[event]) {
      this.sub[event] = []
    }
    this.sub[event].push(fn)

  }
  $emit(event) {
    if(this.sub[event]) {
      this.sub[event].forEach(fn => {
        fn()
      });
    }

  }
}
let vm = new EventBus()
// 订阅事件
vm.$on('click', () => {
  console.log('click')
})
vm.$on('change', () => {
  console.log('change')
})
// 发布订阅
vm.$emit('click')
vm.$emit('change')


class Dep { //主题对象 constructor(){ this.subs = [] //订阅者列表 } notify(){ //所有的订阅者更新 this.subs.forEach(sub => { sub.update() }) } } class Sub { //订阅者 constructor(data){ this.data = data; } update(){ //订阅者的更新方法, 也可自定义更新方法 this.data = this.data + 1; console.log(this.data); } } var dep = new Dep(); dep.subs.push(new Sub(1), new Sub(2)); var pub = { //发布者 publish(){ dep.notify() } } pub.publish();
posted @ 2022-03-02 10:53  我是前端QQ942031558  阅读(88)  评论(0编辑  收藏  举报