老话题,关于js的自定义事件,用处很多(控件控都懂的..),最明显的是实现观察者模式.
简易版代码:
View Code
1 function Class1(){ 2 } 3 Class1.prototype ={ 4 //间接调用 5 evt : function(){ 6 if(this.onEvt){ 7 for(i=0; i
主要涉及到参数传递问题,由于事件处理函数是没有参数的,所以用了个包装类将其转换了下,实现了参数的传递,主要是arguments和apply的使用.
相关
jq提供了实现自定义事件的函数.主要是bind,unbind,trigger顾名思义就是用来实现事件绑定以及触发.
比较简单,直接上代码(列子是实现观察者模式),具体使用查api
View Code
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 : 0 11 }; 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的事件处理实现细节可以查看源代码,园子里有个,偷懒的话可以看看.