首页 > 编程语言 >JavaScript实现发布与订阅

JavaScript实现发布与订阅

时间:2024-06-15 11:43:47浏览次数:23  
标签:订阅 bus JavaScript greet events 发布 handler event

1、代码

class EventBus {
  constructor(){
    this.events = {};
  }
  on(event,handler){
   if(!this.events[event]){
     this.events[event] = [];
   }
    this.events[event].push(handler);
  }
  emit(event,data){
    if (this.events[event]){
      this.events[event].forEach((handler)=>{
        handler(data);
      })
    }
  }
  off(event,handler){
    if (this.events[event]) {
      this.events[event] = this.events[event].filter(h=>h !== handler)
    }
  }
  remove(event){
    delete this.events[event]
  }
}
export {
  EventBus
} 

2、使用方法

  

const $bus = new EventBus();
//订阅
$bus.on("greet", func)

  //发布

 $bus.emit("greet", "word");

 //取消订阅

  $bus.remove("greet",func);

 //删除订阅

  $bus.remove("greet");  

 function func(arg){

  console.log(arg)

 }

 

  

标签:订阅,bus,JavaScript,greet,events,发布,handler,event
From: https://www.cnblogs.com/jzm2842688813/p/18249133

相关文章

  • JavaScript发送电子邮件
    JavaScript发送电子邮件constnodemailer=require("nodemailer");consttransporter=nodemailer.createTransport({host:"smtp.qq.com",//SMTP服务器地址port:465,//SMTP端口,对于SSL使用465secure:true,//对端口465使用“true”,对所有其他端口使用“f......
  • JavaScript闭包
    闭包:内层函数+外层函数的变量,能够访问记住其外部函数作用域中的变量,即使外部函数已经执行完毕,这是因为闭包函数捕获了外部函数的执行环境弊端:可能导致内存泄漏应用于:1.数据私有化和封装:闭包可以用来创建私有变量2.函数工厂:闭包可以用来生成定制的函数,比如记忆函数,柯里......
  • JavaScript内置API
    js的内置api:js语言本身提供的一组预定义的对象、方法和属性,开发者可以直接使用它们来实现各种功能优点:1.提高开发效率2.增加代码可读性和可维护性3.跨平台兼容4.性能优化5.社区支持6.标准化和规范化1.DOMAPI提供了操作网页HTML元素的方法和属性<divid="myEl......
  • JavaScript的终端输入输出
    Inquirer.js是一个基于Node.js的命令行用户界面交互库,它允许你快速构建交互式的命令行应用程序。以下是一些Inquirer的常用方法和使用案例:prompt()-这是Inquirer的核心方法,用于创建一个或多个提示。constinquirer=require('inquirer');inquirer.prompt([{......
  • JavaScript打包可执行文件
    pkg[选项]选项:-h,--help输出使用信息-v,--version输出pkg版本-t,--targets逗号分隔的目标列表(参见示例)-c,--configpackage.json或任何具有顶级配置的json文件--options将v8选项拷贝到可执行文件中,以便与它们一起运行......
  • JavaScript的运算符(算术、比较、赋值、逻辑、条件)
    天行健,君子以自强不息;地势坤,君子以厚德载物。每个人都有惰性,但不断学习是好好生活的根本,共勉!文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。文章目录运算符1.算术运算符1.1示例代码1.2打印结果2.比较运算符2.1示例代码2.2打印结果3.赋值......
  • ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 添加自定义(GLSL)数据
    ArcGISJSAPI高级教程-ArcGISMapsSDKforJavaScript-添加自定义(GLSL)数据核心代码完整代码在线示例ArcGISMapsSDKforJavaScript从4.29开始增加RenderNode类,可以添加数据以及操作FBO(ManagedFBO);通过操作FBO,可以通过后处理实现很多效果,官方提供了几......
  • 发布中文文档类资源仓库-ChineseDocumentPDF
    引言今天中午,排队打饭间隙,刷到新闻,说是:360AILAB-NLP团队开源了中文论文、研报文档场景的轻量化版式分析模型360LayoutAnalysis。面向中文论文及研报两个场景的轻量化版式分析模型已经开源:Github地址:https://github.com/360AILAB-NLP/360LayoutAnalysis,模型权重huggingface地......
  • javascript - 文件上传
    最简单的文件上传接口@ControllerpublicclassExcelCtrl{@ResponseBody@RequestMapping(value="upload",method=RequestMethod.POST)publicResultimportExcel(@RequestParamMultipartFilefile,HttpServletResponseresponse)throwsIOExceptio......
  • javascript - 面向对象
    要是直接百度,如何在javascript中创建一个对象,你能找到一堆这样的文章:《js创建对象的n种方式》、《闭包的n种写法》……咱们不参加考试,不要记那么多,整那么多写法,代码还不好维护。就例举几个,在实际项目开发过程中,比较好的代码写法。兼容语法1如果想兼容旧的浏览器,可以采......