当前位置: 首页 > 后端技术 > Node.js

事件订阅广播组件

时间:2023-04-03 23:57:16 Node.js

exportdefaultclass{//事件堆栈eventStacks=[{eventType:'',handlers:[]}];/***获取事件对应的栈索引**@param{string}eventType事件类型*@return{number}stackIndex对应栈的索引不存在-1*/indexOf(eventType){consteventStacks=this.eventStacks;//存在一个已经存在的事件类型处理栈letstackIndex=-1;for(leti=0;i=0){//已有事件类型直接处理对应的handler函数入栈this.eventStacks[index].handlers.push(handler);}else{//没有事件,放对应的事件}};/***触发对应的事件**@param{string}eventType自定义事件类型*@param{Object}params参数对象*/emit(eventType,params={}){this.execEvent(eventType,params);};/***执行对应的事件**@param{string}eventType自定义事件类型*@param{Object}params参数对象*/execEvent(eventType,params={}){constindex=this.indexOf(eventType);如果(索引<0){返回;}consthandlers=this.eventStacks[index].handlers;for(leti=0;i=0&&this.eventStacks[index].handlers.length){//存在并且已经入栈consthandlers=this.eventStacks[index].handlers;this.eventStacks[index].handlers=handlers.filter(currentHandler=>{returncurrentHandler!==handler});}}}