js事件设计模式-含参数多事件的添加和移除

来源:互联网 发布:皮带轮怎样数控车编程 编辑:程序博客网 时间:2024/06/11 12:52

相对之前 更加完整实用了function creatfunction(obj,skill){if(!obj){obj=window;}var arr=[]; for(var i=2;i<arguments.length;i++){arr.push(arguments[i]);} return function(){obj[skill].apply(obj,arr);}}//给带参数的事件流程函数包一个无参数函数function Person(){}Person.prototype={show:function(){if(this.onshow){//如果存在数组 则进行下面的操作for(var x=0;x<this.onshow.length;x++){this.onshow[x]();//按for循环依次调用}}},addonshow:function(thing){//对自定义对象添加一个添加事件的方法 if(!this.onshow){//如果不存在这个数组 this.onshow=[];//则去建立一个空数组待用}this.onshow.push(thing);//将传入的事件函数从尾部添加到数组中},removeshow:function(things){//对自定义对象添加一个移除事件的方法if(this.onshow){//如果存在数组则进行下面的操作var index=this.onshow.indexOf(things);//找到事件 并把它在数组里的索引存在一个变量里this.onshow.splice(index,1);//把这个数组项删除(也就是移除了相应的事件)}} }function add(a,b){//事件流程函数一alert(a+b);}function ji(c,d){//事件流程函数二alert(c*d);}var man=new Person();var func1=creatfunction(null,'add',5,7);//进行包装赋值var func2=creatfunction(null,'ji',3,6);//进行包装赋值man.addonshow(func1);//12//作为参数传递引用(指针)man.addonshow(func2);//18//作为参数传递引用(指针)man.show();//12 18man.removeshow(func1);//去掉12man.show();//18//成功