美文网首页
发布订阅

发布订阅

作者: 与你清欢_李 | 来源:发表于2019-07-11 19:34 被阅读0次

期望的数据类型
{
event: [fn1, fn2],
}

class EventEmitter {
  constructor() {
    this.subs = {}
  }

  /**
   *
   * 注册事件
   * @param {*} event
   * @param {*} cb
   * @memberof EventEmitter
   */
  on(event, cb) {
    // 注册订阅 事件 和增加回调方法
    ;(this.subs[event] || (this.subs[event] = [])).push(cb)
  }

  /**
   *
   * 发布事件
   * @param {*} event
   * @param {*} args
   * @memberof EventEmitter
   */
  trigger(event, ...args) {
    // 执行 事件中回调方法内的所有 函数
    this.subs[event] && this.subs[event].forEach(cb => cb(...args))
  }

  /**
   *
   * 执行一次
   * @param {*} event
   * @param {*} onceCb
   * @memberof EventEmitter
   */
  once(event, onceCb) {
    const cb = (...args) => {
      onceCb(...args)
      // 执行完移除
      this.off(event, onceCb)
    }
    this.on(event, cb)
  }

  /**
   *
   * 移除注册事件
   * @param {*} event
   * @param {*} offCb
   * @memberof EventEmitter
   */
  off(event, offCb) {
    if (this.subs[event]) {
      let index = this.subs[event].findIndex(cb => cb === offCb)
      this.subs[event].splice(index, 1)
      if (!this.subs[event].length) delete this.subs[event]
    }
  }
}

let en1 = new EventEmitter()

en1.on('t', () => {
  console.log('t')
})

en1.trigger('t')

相关文章

  • 发布-订阅

    参考 https://www.cnblogs.com/shenh/p/10497244.html 模式一:fan...

  • 发布订阅

    https://developer.mozilla.org/zh-CN/docs/Web/API/EventTar...

  • 发布订阅

    期望的数据类型{event: [fn1, fn2],}

  • 发布订阅

    //观察者模式和订阅发布模式的不同点在于,订阅发布模式 订阅者和发布者是解耦的,他们的关联是通过第三方来的//例子:

  • 发布订阅

  • 发布订阅

    最开始是听一位大佬讲 最开始的发布订阅库 是受dom 二级 事件的启发 后来经过封装 形成的一个库 那么 什么是...

  • 发布订阅模式(观察者模式)

    发布订阅模式(观察者模式) 发布订阅也叫观察者模式 发布 && 订阅 使用

  • 设计模式之发布订阅模式(1) 一文搞懂发布订阅模式

    目录 发布/订阅者模式的优点 实现发布/订阅者模式需要考虑的点 何时应使用发布/订阅者模式 发布/订阅者模式与观察...

  • JS-简单实现发布订阅模式

    发布订阅模式主要涉及三个对象:发布者、订阅者、主题对象。 发布-订阅模式 定义  发布-订阅模式又称观察者模式,它...

  • redis 学习(12)-- redis 发布订阅

    redis 发布订阅 发布订阅模式中的角色 发布者(publisher) 订阅者(subscriber) 频道(c...

网友评论

      本文标题:发布订阅

      本文链接:https://www.haomeiwen.com/subject/jwkjkctx.html