当前位置:编程学习 > JS >>

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的视频

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,