博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS中的发布订阅模式
阅读量:7162 次
发布时间:2019-06-29

本文共 1478 字,大约阅读时间需要 4 分钟。

一. 你是如何理解发布订阅模式的

  • JS中的设计模式:
    • 单例模式:处理业务逻辑
    • 构造原型模式:封装类库,组件,框架,插件等
      • 类库:jQuery
        • 只是提供了一些常用的方法,可以应用到任何的项目中,不具备业务性
      • 组件:bootstrap
        • 提供了很多通用的组件(HTML/CSS/JS都是别人规定好的),我们只需要按照要求使用,就可以直接的达到效果
      • 插件: swiper/iscroll
        • 针对于一个具体业务的封装,例如选项卡插件或者轮播图插件
      • 框架:React/Vue
        • 具备一定编程思想的(MVC/MVVM)叫做框架
    • 发布订阅模式:处理一些具体需求的
    • promise模式:处理一些具体需求的
  • 发布订阅模式
    • 发布一个计划表(发布)
    • 往计划表中追加一些需要处理的事情(订阅)

二. 发布订阅模式

发布订阅模式不是一个死的机制,他是一种思想,一种写代码的形式;主要为了处理一对多的场景,应用于不同情况下的不同函数的调用,this很重要

  • 手动进行模拟浏览器事件机制

    1. 订阅
     
    1. 发布
      • 执行
  • 改变this指向

    1. 创建一个小工具盒
    2. 把我们的方法放到了小工具盒里边
    3. 当我们在想用这个方法的时候,直接就到这个小工具盒变量就可以
  • 处理顺序问题的,其实根本就是处理IE事件池乱序问题,那么我们就不能用ie的事件池进行,我们模拟一个事件池(利用发布订阅的思想来模拟我们的事件池)

    1. 监听的时候添加处理程序
    2. 在发布的时候将监听的事件的处理程序都执行    

这里结合ES6的语法,简单写一个发布订阅模式的小案例:

// 发布 emit 订阅 on {}function Girl() {    this._events = {}}Girl.prototype.on = function (eventName,callback) {    //这里判断他是不是第一次添加(订阅)    if(this._events[eventName]){         this._events[eventName].push(callback);     }else{        this._events[eventName] = [callback]    }};Girl.prototype.emit = function (eventName,...args) {     if(this._events[eventName]){        this._events[eventName].forEach(cb=>cb(...args));    }};let cry = (who) =>{console.log(who+'哭');};let shopping = (who) =>{console.log(who+'购物');};let eat = (who) =>{console.log(who+'吃');};let smile=(who)=>{console.log(who+'笑')};let girl1 = new Girl();girl1.on('失恋',cry); girl1.on('失恋',eat);girl1.on('失恋',shopping);girl1.emit('失恋','小明');  let girl2 = new Girl();girl2.on('恋爱',shopping);girl2.on('恋爱',smile);girl2.emit('恋爱','小华');

 

转载于:https://www.cnblogs.com/Scar007/p/7640572.html

你可能感兴趣的文章
演示:交换机端口安全的配置
查看>>
经典再现,谁与争锋
查看>>
关于C++的类对象,内存分布问题
查看>>
VB6 通过winsock控件数组实现客户端和服务器多对一通信
查看>>
C++中的void类型
查看>>
如何处理Entity Framework中的DbUpdateConcurrencyException异常
查看>>
连接mysql数据库
查看>>
3D全景!这么牛!!
查看>>
C++中的explicit关键字
查看>>
ArcGIS Engine开发之旅01---产品组成、逻辑体系结构
查看>>
xen虚拟化实战系列(一)之xen虚拟化环境安装
查看>>
龙骑排雷技巧
查看>>
绑定裸设备(查看裸设备的大小)
查看>>
防止一个用户登录多次的方法
查看>>
zookeeper部署及集群测试
查看>>
基于开源 Openfire 聊天服务器 - 开发Openfire聊天记录插件
查看>>
webservice 测试窗体只能用于来自本地计算机的请求
查看>>
WinForm 窗体间传递数据的一些方法[转]
查看>>
在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解) 背景
查看>>
如何搭建ipv6网络
查看>>