美文网首页JavaScript让前端飞Web前端之路
JavaScript自定义事件和发布订阅模式

JavaScript自定义事件和发布订阅模式

作者: _于易 | 来源:发表于2017-12-19 20:08 被阅读50次

在js和JQuery里都可以自定义事件,在我看来自定义事件的核心就是发布订阅模式的实现。所谓的发布订阅模式是JavaScript设计模式的一种,它的核心在于两点:1.创造一个事件的共享储存空间。2.添加on/off/tirgger等接口实现挂载、移除、触发等动作。
在js和jQuery里已经为我们准备好了挂载触发事件的一系列api,在jQuery里:

$(element).on(event,handler) //实现挂载或者叫监听
$(element).trigger(event) //触发
$(element).off(event) //移除

在js中通过CustomEvent构造函数来创建一个自定义事件,通过addEventListener()dispatchEvent()这两个api来实现事件的发布订阅。dispatchEvent作用是为节点分派一个合成事件。

var EventCenter = {
  on: function(event, handler){
    document.addEventListener(event, handler)
  },
  fire: function(event, data){
    return document.dispatchEvent(new CustomEvent(event, {
      detail: data
    }))
  }
}

EventCenter.on('hello', function(e){
  console.log(e.detail)
})

EventCenter.fire('hello', '你好')

此例中共享的储存空间就是document对象。

如何不依赖web api封装一个发布订阅模式的类呢?

class PubSubHandler {
    constructor(){
        this.eventPool = {};
    }
    //移除
    off(topicName){
        delete this.eventPool[topicName]
    }
    //发布
    trigger(topicName,...args){
        this.eventPool[topicName]&&
        this.eventPool[topicName].forEach(callback => {
            callback(...args)
        });
    }
    //订阅
    on(topicName,callback){
        let topic = this.eventPool[topicName]
        if(!topic){
            this.eventPool[topicName] = []
        }
        this.eventPool[topicName].push(callback)
    }
}

相关文章

  • jquery技巧之让任何组件都支持类似DOM的事件管理

    1. 发布-订阅模式 很多博客包括书本上都说javascript要实现组件的自定义事件的话,可以采用发布-订阅模式...

  • JavaScript自定义事件和发布订阅模式

    在js和JQuery里都可以自定义事件,在我看来自定义事件的核心就是发布订阅模式的实现。所谓的发布订阅模式是Jav...

  • 高性能开发且不为人知的JS新API

    经典设计模式:发布订阅 自定义DOM事件 JavaScript中的模拟事件触发:无需手动操作,也可以基于一些代码触...

  • Javascript 发布-订阅模式

    Javascript 发布-订阅模式 本文内容搬运于:Javascript中理解发布-订阅模式,虽是搬运,但纯手打...

  • js实现发布订阅模式

    发布订阅模式指的是希望接收通知的对象(Subscriber)基于一个主题通过自定义事件订阅主题,被激活事件的对象(...

  • Vue响应式原理

    Vue2.x 核心响应式原理 Vue3.0 核心响应式原理 Vue 自定义事件 Vue 发布订阅模式 发布/订阅模...

  • 观察者模式和发布订阅模式的区别

    观察者模式和发布订阅模式最大的区别就是发布订阅模式有个事件调度中心。 在观察者模式中,观察者需要直接订阅目标事件;...

  • 异步编程解决方案

    事件发布/订阅模式 事件监听器模式是一种广泛用于异步编程的模式,是回调函数的事件化,又称发布/订阅模式。 事件发布...

  • 响应式框架原理5(发布订阅模式简单应用)

    事件发布订阅模式?可以认为JavaScript本身就是事件驱动型语言,比如,应用中对一个button进行了事件绑定...

  • 订阅发布模式

    Q:何为发布订阅模式?A:这是一种发布者和订阅者之间由事件驱动产生关系的软件开发模式Q:发布订阅模式哪里可以看到?...

网友评论

    本文标题:JavaScript自定义事件和发布订阅模式

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