zoukankan      html  css  js  c++  java
  • 发布-订阅者模式

    以下内容为个人见解:

      1.发布-订阅模式我认为是解决通信问题很方便的一种模式。

      2.我想以前用过addEventListener这个事件订阅方法的,这个是原生JS中发布-订阅模式的体现。

     下面就讲一下这个发布-订阅模式的实现,请读者多多提意见。

      发布-订阅模式,从这个名字可以看出应该会有两个动作,发布和订阅这两个动作:

      on():用来订阅这个动作,订阅这个动作简单来说就是我订阅了一个东西,你什么时候送来我不知道,也不需要知道,你只要发布了我也就对应的收到了。

      emit():发布这个动作,也就是调用on中注册的监听器的回调函数。

      off():对于一些订阅动作的删除。

      

    class eventEmiteer {
        constructor () {
            this.eventMap = {}; //存储订阅的信息
        }
        on = (type, handler) => {
            // 判断回调函数的类型 如果不是一个函数就抛一个错误
            if (!(handler instanceof Function)) {
                throw new Error("handler is not a Function!");
            }
            // 判断事件在eventMap中有没有存在,没有要新建一个事件类型
            if (!this.eventMap[type]) {
                this.eventMap[type] = [];
            }
            // 直接往对应的事件类型中push回调函数
            this.eventMap[type].push(handler);
        }
        emit = (type, params) => {
            // 判断eventMap中有没有这个类型  有就进行遍历调用
            if (this.eventMap[type]) {
                this.eventMap[type].forEach((itemHandler) => {
                    itemHandler(params); // 传递对应的参数
                });
            }
        }
        // 移除对应类型的回调函数
        off = (type, handler) => {
            if (this.eventMap[type]) {
                // 移除回调函数
                this.eventMap[type].splice(this.eventMap[type].indexOf(handler) >>> 0, 1);
            }
        }
    }
  • 相关阅读:
    [No0000C9]神秘的掐指一算是什么?教教你也会
    [No0000C8]英特尔快速存储IRST要不要装
    [No0000C7]windows 10桌面切换快捷键,win10
    [No0000C6]Visual Studio 2017 函数头显示引用个数
    [No0000C4]TortoiseSVN配置外部对比工具
    [No0000C5]VS2010删除空行
    [No0000C3]StarUML2 全平台破解方法
    [No0000C2]WPF 数据绑定的调试
    [No0000C1]Excel 删除空白行和空白列VBA代码
    [No0000C0]百度网盘真实地址解析(不用下载百度网盘)20170301
  • 原文地址:https://www.cnblogs.com/7fls/p/14970824.html
Copyright © 2011-2022 走看看