关于事件的一点小总结

  nodejs中很多对象具有监听和发送事件的功能,是因为继承了EventEmitter对象。

  总结的一点demo:

var  EventEmitter  =    require(‘events‘).EventEmitter;
var  util          =    require(‘util‘);

var  Client   =  function(id) {

    EventEmitter.call(this); //了解call的用法

     this.id = id;
     ....

}; 

 util.inherits(Client, EventEmitter);

  绿色加粗的代码很重要。

  这样,Client的对象就可以发送和监听事件了。

  做个小例子,建一个Sender类,每隔1s创建一个sender对象,每个对象都监听一个send事件。三个对象之后,触发事件发生,就每隔1s输出自己的id。

  

var util            =   require(‘util‘);
var EventEmitter    =   require(‘events‘).EventEmitter;

var Sender  =   function(id){

    EventEmitter.call(this);

    this.id =   id;
};

util.inherits(Sender, EventEmitter);//继承EventEmitter,就是事件功能

var count   =   1;

var senderArr   =   [];
var inter_id = setInterval(function(){
    if(count < 3){
        var sender  =   new Sender(count++);
        console.log(‘sender count is ‘ + (count-1));

        sender.once(‘send‘, function(){  //监听事件,事件触发,开始执行监听器函数
            debugger;
            setInterval(function(){
                debugger;
                console.log(‘sender ‘ + sender.id);
            }, 1000);
        });
        senderArr.push(sender);  //添加进数组
    }else {
        debugger;
        senderArr.forEach(function(sender){
            sender.emit(‘send‘);//触发事件
        });
        debugger;
        clearInterval(inter_id);//清楚interval,需要指定id

    }
}, 1000);

有几个知识点:

  1. setInterval  和 clearInterval(id)

   setInterval()会返回一个id,删除这个interval需要这个id.

  2.数组的使用,以及遍历

   var senderArr  =  [];
   senderArr.push(sender);
   senderArr.forEach(function(client){

   });

  3.事件触发

   

sender.once(‘send‘, function() {
    ........
});

sender.emit(‘send‘);

监听事件有一些方法,如on(),once()等。

注意:触发,和监听的对象要相同,如代码绿色提示部分。

时间: 2024-10-24 07:49:11

关于事件的一点小总结的相关文章

做预解释题的一点小方法和小技巧

在JavaScript中的函数理解中预解释是一个比较难懂的话题.原理虽然简单,寥寥数言,但其内涵却有深意,精髓难懂.如何在轻松活跃的头脑中将它学会,现在针对我在学习中的一点小窍门给大家分享一下,希望能给大家一些帮助: 万事需遵循"原理"--"预解释"无节操和"this"指向:(可先看例题解析然后结合原理进行学习) (感谢蕾蕾老师给归纳的预解释无节操原理:) 如果函数传参数则先于以下执行,就相当于在函数私有作用域下var了一个变量:根据作用域原理,

程序开发的一点小总结

程序开发的一点小总结, 给要学习一门新语言的朋友一些帮助, :P 1.多项条件下的处理 第一种方法: 每个需要执行A函数的条件下都写一边A函数调用, 这种方式也是最中规中矩的写法, 代码相对臃肿, 如果A有任何变动, 就要修改多处, 这种代码块写多了, 容易漏掉 if(b==1) a() else if(b==2) else if(b==3) a() else a() 第二种写法: 在B条件筛选前, 创建一个临变量布尔c, 用来监控需要A函数需要的条件, 需要就为true, 不需要就不写(默认初

关于win8开发的一点小总结

我今天做画面的时候,发现了一点小问题. 我在xmal文件里面加了一个CheckBox控件,设置IsChecked属性为True,并添加了Checked事件.Checked事件里面有对另外一个TextBox的访问. 这时候我运转程序,它会先走构造方法的InitializeComponent方法,然后就直接走到Checked事件,这时候可以看到TextBox是个null值,也就是说它还没被初期化. 我的理解是InitializeComponent方法先初期化CheckBox,当初期化它的IsChec

js之onload事件的一点使用心得

刚看到这篇文章,我也犯晕,实际的原因其实是函数赋值时多了个(),这标明是一个表达式,所以会直接执行函数,小小一个(),奥妙真不小. js之onload事件的一点使用心得 window.load和window.onload的意思并不只是页面加载完就执行,那要看你怎么用了,下面做了示例为大家介绍下,感兴趣的朋友可以参考下 如果我问你window.load和window.onload分别是什么意思,恐怕你会回答我:“这不是页面加载完就执行吗”. 但是答案是不一定,得看你怎么用.看一下例子吧 例1: 代

js中用for循环事件绑定的小问题

在js中,如果用for循环进行事件绑定,可能会遇到一点小问题,看下面第一个示例,无论点击哪个div,都会弹出3,即length. 因为这相当于事件绑定的同时,并没有把所对应的i进行一起绑定,i的值是最后一个值,即3. 示例1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport"

新闻发布的一点小总结

经过一段时间的学习,完成了新闻发布的基础功能,进行一点小总结,方便日后回顾.下面是我的一点小总结,不足之处请勿见笑... 我们想要完成一个新闻发布,首先要使其能够成功发布,并且让它能够实现添加.删除.修改.查询.上传.下载等功能.我们还调用AJAX功能查看输出为XML.JSON格式的新闻内容.为完成以上功能,我们首先要进行jdk.tomcat.eclipse的安装和配置.1.各软件的安装和配置1.1.jdk的安装和配置: 1.1.1.下载jdk:下载地址:http://www.oracle.co

【搬运工】一点小收集

1.几种基础算法. 2.数学之美. 3.贝叶斯方法. 转自互联网,链接背后都是故事,水深,都是鱼. 敬意且谨以自勉,长途漫漫,任重道远. 以上. [搬运工]一点小收集,布布扣,bubuko.com

Lichee (六) 配置内核时的一点小优化

我们在分析<Lichee(二) 在sun4i_crane平台下的编译 >的时候,居然没有一个步骤是在配置内核 make ARCH=arm menuconfig 仔细的读过的代码的会发现,在build_kernel有这么一段话 if [ ! -e .config ]; then echo -e "\n\t\tUsing default config... ...!\n" cp arch/arm/configs/sun4i_crane_defconfig .config fi

给Javascript初学者的一点小建议

本文来自e良师益友网 一般初学JavaScript的时候最头痛的就是浏览器兼容问题.在Firefox下面好好的代码放到IE就不能显示了,又或者是在IE能正常显示的代码在firefox又报错了. 如果你正初学JavaScript并有着一样的处境的话建议你:初学JavaScript的时候无视DOM和BOM的兼容性,将更多的时间花在 了解语言本身(ECMAScript).只在特定浏览器编写代码(Chrome/Firefox/Safari),实际工作中使用成熟的 JavaScript框架(jQuery等