手写 发布订阅

  • JS实现发布订阅功能
// 发布订阅
const eventHub = {
  // 队列MAP, 存放事件名和触发事件
  queueMap: {},
  // 注册事件
  on: (name, fn) => {
    eventHub.queueMap[name] = eventHub.queueMap[name] || []
    eventHub.queueMap[name].push(fn)
  },
  // 触发事件
  emit: (name, data) => {
    const q = eventHub.queueMap[name]
    if (!q) return
    q.map(fn => fn.call(null, data))
  },
  // 取消事件
  off: (name, fn) => {
    const q = eventHub.queueMap[name]
    if (!q) return
    const index = q.indexOf(fn)
    if (index === -1) return
    q.splice(index, 1)
  }
}

eventHub.on('click', console.log)
eventHub.on('click', console.error)
eventHub.emit('click', 'jnp')

eventHub.off('click', console.log)

posted @   coderjnp  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示