重写事件抛发接收机制原理.docxVIP

  • 2
  • 0
  • 约1.94千字
  • 约 4页
  • 2021-11-05 发布于浙江
  • 举报
PAGE PAGE 1 重写事件抛发接收机制原理 关于js中大事侦听和抛发机制的一些基础容易重构,通过这个容易重构了解中介者模式的工作方式,以下就是要做的容易重构计划 思路: 创建EmitterTarget类和EmitterEvent类。 EmitterTarget类主要用法了中介模式+观看者模式 其中EmitterTarget类的实例化属性list充当中介角色,每当执行add办法时,给EmitterTarget类的实例化对象注册大事名称及触发函数;每当该对象执行remove办法时,从list列表中移除注册的大事及触发函数; dispatchEvent办法主要是发送大事对象本体,目的是为了在指定时刻触发大事函数以及传递数据参数。 ==EmitterTarget类实例化对象本身就是观看者,观看者的特点是有add,remove,触发转变的函数(update或这里的dispatchEvent),以及应当实用于存放注册信息的属性或者单例对象。 ==EmitterEvent类主要是用来创建大事对象本身,在创建时声明需要触发的大事类型以及需要携带的参数。 EmitterTarget.ts代码如下: import EmitterEvent from quot;./EmitterEventquot;; ? interface IEvent{//中介者即存储实例化对象绑定的大事的list的数据规范接口 [key:string]:Array;//key是大事名,value是触发大事函数数组 } export default class EmitterTarget{ private list:IEvent={};//私有变量list,只用于办法内部数据存储通信 constructor(){ ? } public addEventListener(type:string,handler:Function):void{ if(!this.list[type])this.list[type]=[];//按照实例化对象传进来的大事类型推断list列表中是否注册该大事类型,假如没注册过,则创建这个字段 var index=this.list[type].indexOf(handler);//看对应的大事中绑定的触发函数数组中是否存在这个触发函数 if(index-1) this.list[type][index]=handler;//存在则笼罩 this.list[type].push(handler);//假如触发函数之前没有则在对应大事绑定的触发函数数组中新增 } public removeEventListener(type:string,handler?:Function):void{ if(!this.list[type])return;//假如list注册表中无大事注册,则删除无意义,挺直返回 if(handler===undefined){//假如调用该办法没有传要删除大事类型对应的触发函数就挺直将该大事类型对应的所有触发函数删除 for(var i=0;ithis.dataHandler(e));//执行大事侦听办法时,在注册表中注册大事及其触发函数 } static get instance():Main { if(!Main._instance) Main._instance=new Main(); return Main._instance; } private dataHandler(e:EmitterEvent){//大事侦听的触发函数即回调函数 var data:IResData=e.data as IResData; var command:IRes; command=new ResDataShow(); command.exec(data.req,data.res,data.data); } } 2.详细抛发操作 import EmitterEvent from quot;./EmitterEventquot;; import Main from quot;./Mainquot;; var evt=new EmitterEvent(type,{req:req,res:res,data:dataObj}); Main.instance.dispatchEvent(evt);//抛发大事,触发instance单例的绑定的函数

文档评论(0)

1亿VIP精品文档

相关文档