js 实现函数触发器 js 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function zhang(data){ alert(data.name);}function yun(data){ alert(data.name);}var listeners = {"zhang":zhang,"yun":yun};Event.prototype.trigger = function( eventName , data){ var fn = listeners[eventName] || null; var i,len; if(fn instanceof Array){ for(i=0,i<fn.length;i<len;i++){ fn[i] && fn[i](data); } }else if(fn instanceof Function){ fn && fn(data); }}var a = new Event("aaa");a.trigger("zhang",{name:"zhang"});a.trigger("yun",{name:"yun"});a.trigger("yun1",{name:"yun"});这个是你想说的问题吗?触发其实就是在执行对应的函数而已,所以需要你先把需要的信息放到listeners对象中,后面如果有触发对应类型的事件的话,就去listeners对象中找这个属性,找到的话就执行~~~ 谢谢,是这个意思。我有几个问题:var listeners = {"zhang":zhang,"yun":yun}; <=== 这句话中 冒号后的 zhang是函数指针吧?if(fn instanceof Array){ <=== 为什么fn可能是Array类型呢?是因为可能触发多个函数吗,多个函数指针组成数组?fn[i] && fn[i](data); <=== 为什么要用&&,只写fn[i](data)不可以吗? 1:那个后面的就是一个函数名,这样后面fn[i]就会找到对应的函数了。说函数指针也是对的。2:因为你可以对一个元素绑定多个回调函数啊,如果是array类型,就会顺序把所有的回调函数都执行了。3:因为有时候可能会出现,你已经把对应的函数指针给删除了,但是又去调用了。这个时候就要先判断fn[i]是否存在。如果不存在或者fn[i]的值是undefined,那么就不会在执行后面的函数了。其实最佳的判断是要判断fn[i]是不是一个function函数,就像下面的elseif中的判断。其实目的就是为了验证一些类型信息,和if、else相同的功能的。 Ckeditor的极度困惑 ★★一段jquery不能正常执行的问题★★ 哪里有完整的js手册下载 求助JS动态添加。“删除后取值问题” javascript函数奇怪问题???在线等!! 父窗体已经是全屏,寻求在这个窗体下的浮动窗体方案 js 弹出一个窗口问题! DIV移动的问题 有关access is denied的问题 请问,一个页面,如果鼠标或键盘没有动的话,过30秒时间就跳到别的页面,在线马上揭分 如何把A-Z变成ASIIC码的数字? 求一个js特效 要求一个div层在网页的左上角飘到右下角 循环
alert(data.name);
}function yun(data){
alert(data.name);
}
var listeners = {"zhang":zhang,"yun":yun};Event.prototype.trigger = function( eventName , data){
var fn = listeners[eventName] || null;
var i,len;
if(fn instanceof Array){
for(i=0,i<fn.length;i<len;i++){
fn[i] && fn[i](data);
}
}else if(fn instanceof Function){
fn && fn(data);
}
}var a = new Event("aaa");a.trigger("zhang",{name:"zhang"});
a.trigger("yun",{name:"yun"});
a.trigger("yun1",{name:"yun"});这个是你想说的问题吗?
触发其实就是在执行对应的函数而已,所以需要你先把需要的信息放到listeners对象中,后面如果有触发对应类型的事件的话,就去listeners对象中找这个属性,找到的话就执行~~~
var listeners = {"zhang":zhang,"yun":yun}; <=== 这句话中 冒号后的 zhang是函数指针吧?
if(fn instanceof Array){ <=== 为什么fn可能是Array类型呢?是因为可能触发多个函数吗,多个函数指针组成数组?
fn[i] && fn[i](data); <=== 为什么要用&&,只写fn[i](data)不可以吗?
如果不存在或者fn[i]的值是undefined,那么就不会在执行后面的函数了。其实最佳的判断是要判断fn[i]是不是一个function函数,就像下面的elseif中的判断。其实目的就是为了验证一些类型信息,和if、else相同的功能的。