javascript高手教教我(添加事件侦听,广播事件)
能不能写个最简单的例子给我学习. 比如写个为一个div添加一个单击事件侦听,并且广播这个事件. 最好是写注解...感激万分.
以下代码是我在别人空间看到的,但是不懂....
function DoEvents(){
this.lstner=[]; //this.lstner? lstner是属性吗? this又是指什么对象, []是指数组吗?javascript的写法是这样的吗? 不用加个声明吗
this.addListen=function(obj){//添加侦听
obj=typeof(obj)=="string"?document.getElementById(obj):obj
//obj就是要为添加事件的对象吗? 这个写法又是什么? = ==
this.lstner.push(obj);
}
this.broadcastEvent=function(f,args){//广播事件
// broadcastEvent为什么在帮助文档和搜索引擎里找不到呢,他是指什么
for(i=0;i<this.lstner.length;i++){
eval(f).apply(this.lstner[i],args);//这句的意思是?
// 这个 f是指什么? args又是指什么?
}
}
}
//实例化该对象
var de = new DoEvents();
//在需要广播的地方添加侦听
function needAddEvent(){
de.addListen(getElementById(id));//添加侦听到对象上
de.broadcastEvent("methodName",args);//广播事件
}
补充:当然有了,没有我还问干嘛.... 用这样来做前台开发可以省很多事情
答案:首先,我不得不说这是个非常棒的面向对象设计。我的JS学得也不怎么样,也刚刚才学了半年多而已,很多地方都不懂,不过看见没有高手来为你解答。我就把我知道的告诉你吧,也许会有一些说法不对,但大部分是不会有错的。希望大家一起进步。
function DoEvents(){
this.lstner=[]; //这是公有成员,是个队列,里面存储要被添加事件的对象的序列,这样就可以一次为很多对象添加同样的事件
this.addListen=function(obj){ //添加侦听
obj=typeof(obj)=="string"?document.getElementById(obj):obj
//你说对了,obj就是要被添加事件的对象。这种写法其实是一种判断后赋值的表达式,用法是这样的a=b?c:d,如果b是布尔值true(b可以是一个值或者一个表达式,比如0就是false,1是true,或者0==1就是false,0==0就是true),就把c赋给a,如果b是false,就把d赋给a。不知道你听懂没有,在这个例子里面,就是要判断在实例里面传进来的obj参数是一个对象的id还是对象本身,typeof(obj)=="string"为真就说明obj是一个对象的id,当然就要用getElementById取得对象才行,如果typeof(obj)=="string"为假,就是说明obj是对象本身,直接赋给obj本身就行了。这一行表达式的目的,总结起来就是“过滤”
this.lstner.push(obj); //把传进来的obj添加进队列里
}
this.broadcastEvent=function(f,args){//广播事件
// 这是这个例子的作者自己写的一个公有方法,并不是你所理解的JS里原生的方法
for(i=0;i<this.lstner.length;i++){
eval(f).apply(this.lstner[i],args); //这里我也不太明白eval用来干什么,eval这个方法很少用到,它的用法是这样的,如果传进去的是一个字符串就执行这个字符串,返回执行结果,如果不是,就直接返回括号里的东西。举个例,就像"1+2",你说这个在JS里算什么?一个表达式吗?错,一个字符串,看起来像表达式而已。如果把它放到eval的括号里,就变成了你想要的表达式,返回3。按我的理解,这个地方它的作用也是过滤。接着说后面的,apply的作用就是把这个函数附加到this.Istner[i]上去
// f就是指要附加的事件,args就是作用在this.Istner[i]上的f事件的参数。用apply将事件f和参数args一起传给对象this.Istner[i]。
}
}
}
//实例化该对象
var de = new DoEvents();
//在需要广播的地方添加侦听
function needAddEvent(){
de.addListen(getElementById(id));//添加侦听到对象上
de.broadcastEvent("methodName",args);//广播事件
}
//最后实例化这里是最漂亮的写法,一般刚刚上手JS都不会想到用var de = new DoEvents()这种方法,一般就写一个函数,把事件用for循环附加到各个对象上,毫无重用性,在大规模开发里效率非常低。这个例子很棒,值得学习。
//P.S.你这里可能会对this这个东西非常困惑,建议你去看看 “Javascript中的类” 和 "私有成员、私有方法、公有成员、公有方法......" 这两个知识点,一切就明白了。
广播、侦听,这些词在js里有吗?
上一个:JavaScript里面,函数fclose()的功能是什么?
下一个:求马士兵Javascript+jsp+Servlet的视频