js简易版自定义事件及其应用
来源:互联网 发布:歧视 知乎 编辑:程序博客网 时间:2024/06/06 00:26
COME FROM
老话题,关于js的自定义事件,用处很多(控件控都懂的..),最明显的是实现观察者模式.
简易版代码:
1 function Class1(){ 2 } 3 Class1.prototype ={ 4 //间接调用 5 evt : function(){ 6 if(this.onEvt){ 7 for(i=0; i<this.onEvt.length; i++){ 8 this.onEvt[i](); //逐个调用处理函数 9 } 10 } 11 }, 12 //添加事件处理函数 13 attchOnEvt : function(_eventHandler){ 14 if(!this.onEvt) 15 this.onEvt = []; //存放事件处理函数 16 this.onEvt.push(_eventHandler); 17 }, 18 //删除 19 detachOnEvt : function(_eventHandler){ 20 this.onEvt.pop(_eventHandler); 21 } 22 } 23 24 //包装下事件处理函数,使其可以接收参数 25 function MakeFunc(obj,strFunc){ 26 var args = []; //存放参数 27 if(!obj) 28 obj = window; 29 for(var i=2; i<arguments.length; i++){ 30 args.push(arguments[i]); 31 } 32 return function(){ 33 obj[strFunc].apply(obj,args); //调用具体处理函数 34 } 35 36 } 37 38 //处理函数-路人甲 39 function _eventFunc(sName){ 40 console.log("i'm "+ sName); 41 } 42 43 //test 44 var obj = new Class1(); 45 obj.attchOnEvt(MakeFunc(null, "_eventFunc", "kobe")); 46 obj.evt(); 47 obj.detachOnEvt(MakeFunc(null, "_eventFunc", "kobe")); 48 obj.evt();
主要涉及到参数传递问题,由于事件处理函数是没有参数的,所以用了个包装类将其转换了下,实现了参数的传递,主要是arguments和apply的使用.
相关
jq提供了实现自定义事件的函数.主要是bind,unbind,trigger顾名思义就是用来实现事件绑定以及触发.
比较简单,直接上代码(列子是实现观察者模式),具体使用查api
1 //被观察对象 2 var Subject = { 3 }; 4 $(Subject).bind("evtHandler",function(event,sName){ 5 console.log("i'm "+sName); 6 }) 7 8 //观察者 9 var Observer = {10 count : 011 };12 //订阅事件13 Observer.regist = function(){14 $(Subject).bind("evtHandler.Observer",function(event,sName){15 Observer.count++; //当订阅的事件被触发时,进行逻辑处理16 console.log(sName +"'s count: "+Observer.count);17 })18 } 19 Observer.regist();20 21 //触发事件22 $(Subject).trigger("evtHandler",["num1"]);
其他:关于jq的事件处理实现细节可以查看源代码,园子里有个源码分析系列的,偷懒的话可以看看.
0 0
- js简易版自定义事件及其应用
- 简易自定义angular js
- 自定义事件在cocos2d js里的应用
- js事件应用(带框拖拽、自定义滚动条)
- 自定义View及其监听事件
- js 自定义事件
- js自定义事件
- js自定义事件
- JS 自定义事件
- js-自定义事件
- js的自定义事件
- js自定义事件
- JS自定义事件
- js自定义事件
- js自定义事件
- js 自定义事件
- JS自定义事件原生
- js自定义事件
- sql 2000 "无法执行查询,因为一些文件缺少或未注册"的
- 1037. Magic Coupon (25)
- 边记边学PHP-(九)PHP字符串常用函数及内容分页实现
- HTML中id,name,value的认识
- 关于接口可以实例化的问题
- js简易版自定义事件及其应用
- CodeForces 348C Subset Sums nsqrtn的姿势。。
- 虚拟内存的好处及多级分页机制的原因
- Tomcat配置过程中的一点小问题
- 面向对象编程的认识
- Mecanim学习笔记
- WinEdit注册破解,试用时间修改
- Unity3D研究院之Machine动画脚本自动生成AnimatorController(七十一)
- Win8.1和Centos 7双系统, 磁盘挂在问题,Unable to access “ *** Volume”