美文网首页
一个简单的pub-sub.js

一个简单的pub-sub.js

作者: 哇塞田 | 来源:发表于2018-12-10 16:59 被阅读6次

pub-sub也就是发布订阅的模式是我们比较常用的设计模式,它一种一对多的依赖关系,在收到相应的消息之后会更新订阅该消息的所有事件。今天在写项目时候正好用到了,就写了一个简版的。

  class PubSub {
    constructor() {
      this.handlers = {}
    }
    // 订阅
    on(key, handler) {
      if (!(key in this.handlers)) {
        this.handlers[key] = []
      }
      this.handlers[key].push(handler)
    }
    // 卸载
    off(key, handler) {
      const index = this.handlers[key].findIndex(item => {
        item === handler
      })
      // 不存在直接返回
      if (index < 0) {
        return
      }

      if (this.handlers[key].length === 1) {
        // 只有一个直接删除key 节省内存
        delete this.handlers[key]
      } else {
        this.handlers[key].splice(index, 1)
      }
    }
    // 触发
    walk(key) {
      // 取出参数并转化为数组
      const args = Array.prototype.slice.call(arguments, 1)
      this.handlers[key].forEach(handler => {
        // 防止this指向乱掉
        handler.apply(this, args)
      });
    }
  }

测试

  const pubSub = new PubSub()
  fn1 = function(val1, val2) {
    console.log(val1, val2) // hah hahah
  }
  fn2 = function(val1) {
    console.log(val1) // hah
  }
  pubSub.on('ms1', fn1)
  pubSub.on('ms1', fn2)
  pubSub.walk('ms1', 'hah', 'hahah')

相关文章

  • 一个简单的pub-sub.js

    pub-sub也就是发布订阅的模式是我们比较常用的设计模式,它一种一对多的依赖关系,在收到相应的消息之后会更新订阅...

  • 一个简单的小结

    这个学期发生了很多事情,失去了女朋友,课程一而再再而三的报警,课程也退了很多,平时的专业基本功也丢了很多,平日的课...

  • 一个简单的梦

    热浪滚滚,蝉鸣阵阵 六月的太阳火焰喷张 “蝉噪林逾静,鸟鸣山更幽” 古人的智慧如同一股清泉,润人心喉 我有一个简单...

  • 一个简单的client

    import socketimport ssl def parsed_url(url):"""解析 url 返回 ...

  • 一个简单的故事

    我的爸爸 我有一个严厉的父亲 父亲从过军 一直以来 都以一个军事化管理的当时教育我 小时候 和父亲 聚少离多 为...

  • 一个简单的梦想

    你喜欢四月的樱花吗 沾着长江的水汽升腾而上 伴随江南烟雨一路飘摇 在黎明之前 划过极北的地平线 缱绻在你身旁 这不...

  • 一个简单的crackme

    步骤如下 1 .程序链接 http://pan.baidu.com/s/1bSPUdK 2.这是一个vb程...

  • 一个简单的故事

    阿媛坐在我左侧,拿着一副巨大的油画。 她起身要走,我扯住她的衣袖,问道:“为什么非要走?” “我给你说个故事吧。”...

  • 一个简单的开始

    2018年7月,结束了为期一年的西部计划志愿者工作,从贫瘠的西部农村回到了较为繁华的东部家乡。 一种失落感油然而生...

  • 一个简单的简历

    html文件 css文件

网友评论

      本文标题:一个简单的pub-sub.js

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