JS发布订阅模式

介绍

vue 开发中,经常会用到事件传递,例如 eventBus ,我们可以使用 onemit 方法去触发需要的事件.

定义

发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。订阅者( Subscriber )把自己想订阅的事件注册( Subscribe )到调度中心( Event Channel ),当发布者( Publisher )发布该事件( Publish Event )到调度中心,也就是该事件触发时,由调度中心统一调度( Fire Event )订阅者注册到调度中心的处理代码。 例如以下在 vue 中的使用

// 封装成工具库eventBus
import Vue from 'vue'
let bus = new Vue()
Vue.prototype.$eventBus = bus
export default bus

// 页面使用
import Bus from './commom/eventBus'
Bus.$emit('test', null)
Bus.$on('test', this.doSomeThing)

实现

以上是 vue 集成了功能.同样的,我们可以用 es6 实现. ::: warning 思路

  1. 创建一个对象

  2. 在该对象上创建一个缓存列表(调度中心)

  3. on 方法用来把函数 fn都加到缓存列表中(订阅在注册事件到调度中心)

  4. emit 方法取到 arguments 里第一个当做 event ,根据 event 值去执行对应缓存列表中的函数(发布者发布事件到调度中心,调度中心处理代码)

  5. off 方法可以根据 event 值取消订阅(取消订阅) :::

参考

Last updated

Was this helpful?