事件绑定一个事件名称对应多个事件函数 应此它们的关系是一对多的关系 数据类型采用对象的形式
key:val 因为函数有多个 所以val选用数组
 
事件仓库
  eventList = {
    key:val,
    key:val
  }
绑定事件
on(eventName,cb){}
 
第一步判断当前事件是否存在 如果不存在 初始化一下 key:[] 然后在将cb push到数据中去即可
let eventList = {};

const $on=(eventName,cb)=>{

    if(!eventList[eventName]){
eventList[eventName] = [];
}
eventList[eventName].push(cb)
}
 
触发事件
emit(eventName,params){}
 
第一步判断事件名称是否存在 如果存在 遍历数组中的所以函数调用即可 如果params存在 将params传递函数中
const $emit = (eventName,params)=>{

    if(eventList[eventName]){
let arr = eventList[eventName];
arr.map((cb)=>{
cb(params)
})
}
}
 
解绑事件
off(eventName,cb){}
第一步判断事件名称是否存在 如果存在 再次判断第二个参数是否存在 如果存在将这个cb从当前数组中移除 如果第二个参数不存在 清空数据
const $off = (eventName,cb)=>{
if(eventList[eventName]){
if(cb){
let index = eventList[eventName].indexOf(cb);
eventList[eventName].splice(index,1); }else{
eventList[eventName].length = 0; }
}
}
 
 
 
 

封装nodeJS中 $on $emit $off 事件的更多相关文章

  1. 深入理解nodejs的异步IO与事件模块机制

    node为什么要使用异步I/O 异步I/O的技术方案:轮询技术 node的异步I/O nodejs事件环 一.node为什么要使用异步I/O 异步最先诞生于操作系统的底层,在底层系统中,异步通过信号量 ...

  2. 基本event封装:阻止冒泡、默认事件等

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> ...

  3. js 事件相关 事件处理 封装 事件封装 DOM 0 2 3 级事件

    1.绑定 function(element, type, handler){        if (element.addEventListener) {            element.add ...

  4. swift项目第六天:中间发布按钮的封装以及监听点击事件

    import UIKit /* 总结:1:给UIButton写分类,新建文件swiftFile,一般为了区分起名字都是名字-Extension,要想调用UI控件需要导入 import UIKit框架, ...

  5. Nodejs中的this

    以下内容都是关于在nodejs中的this而非javascript中的this,nodejs中的this和在浏览器中javascript中的this是不一样的. 在全局中的this console.l ...

  6. CORS Cookie,和nodejs中的具体实现

    CORS(跨来源资源共享协议),高级浏览器(Chrome,firefox, opera, safir, ie10)在 XMLHttpRequest(AJAX) 中已经支持了这个协议.可以实现ajax跨 ...

  7. 封装常用的跨浏览器的事件对象EventUtil

    var EventUtil = { addHandler: function(element,type,handler) { //事件监听 if(element.addEventListener) { ...

  8. mySql配置在nodejs中使用

    mySql安装完成后,配置链接nodejs项目中的数据库. 1.测试是否安装成功. 2.use nodejs使用nodejs 3.设置数据源 5.exit

  9. Etag缓存在PHP和NodeJS中的实现

    HTTP 提供了许多页面缓存的方案,其中属 Etag 和 Last-Modified 应用最广.本文会先介绍 Etag 的应用场景,然后说说他在 php 和 node 中的使用. 本文地址:http: ...

随机推荐

  1. kafka单节点的安装,部署,使用

    1.kafka官网:http://kafka.apache.org/downloads jdk:https://www.oracle.com/technetwork/java/javase/downl ...

  2. PHP递归获取二维数组中指定key的值

    $data = [ "resulterrorCode" => 0, "resultraw" => [ "result" => ...

  3. SSM项目目录结构

  4. 有意思的算法题:有10个文件,每个文件大概有10G,求里面最大的100个数;

    算法思路 1: 第一个阶段:对于单个10G文件而言 1. 初始化:先取100个数,构建最小堆: 开始比较: 2. 取一个数 A,与最小堆的根节点进行比较: 3. 如果 A > 最小堆根节点,则替 ...

  5. 提高在word编辑公式的效率,及快捷键、对齐、编号问题

    1.     Word中编辑公式简介(重点看) https://jacobz.top/2017-08/WordMath/ 2.     快捷键 https://wenku.baidu.com/view ...

  6. SQL语句练习题【主供自己学习、记忆】

    1.这是我在面试中遇到的一道sql题,没有答出来,o(╥﹏╥)o 这是我刚才在网上查找函数之后写的SQL语句,能得到这个结果.[谁有不同的方法,欢迎底下评论留言哈] select (DATENAME( ...

  7. Cause: java. lang.InstantiationException: tk.mybatis.mapper.provider.base.BaseInsertProvider

    相信现在Java Web开发都是用的mybatis吧,而用到mybatis很多人都不会错过通用mapper吧! (纯属瞎扯淡...qwq). 如我上一篇博客所写,目前公司新项目,使用了通用mapper ...

  8. Zathura: 轻巧好用的 PDF 查看器]

    [Zathura: 轻巧好用的 PDF 查看器](https://linuxtoy.org/archives/zathura.html) 这个文件很轻巧,且支持VIM方式的 快捷键

  9. teamviewer quicksupport 插件(下载)

    teamviewer quicksupport 插件(下载) teamviewer是一款远程控制软件(免费,比较好的); teamviewer quicksupport是一款支持手机可以被远程控制软件 ...

  10. window10 Docker仓库访问

    window10 Docker仓库访问 docer官网 docker仓库 windown10 安装docker可以参考 window10安装docker 配置了加速器以后还访问不了,点击托盘处dock ...