您的位置:首页 > Web前端 > Node.js

Node.js学习笔记——事件处理机制&事件环机制

2020-01-14 19:38 489 查看

Node.js学习笔记——事件处理机制&事件环机制

  • 模块
  • EventEmitter类

    所有可能触发事件的对象都是一个继承了EventEmitter类的子类的实例对象。

    EventEmitter类各种方法

    激发事件

    • emitter.on(event,listener)
    • 或emitter.addListener(event,listener)
    • 或emitter.once(event,listener) //一次
      发生event就执行listener
    • emitter.listener(event)
      返回由该事件的所有事件处理函数构成的数组。

    删除触发事件

    • emitter.removeListener(event,listener)
    • emitter.removeAllListener(event)

    手工触发某个对象的一个事件

    • emitter.emit(event,parameter1,parameter2,…)
    var http=require('http');
    var server=http.createServer();
    server.on('custom',function(a,b,c){
    console.log(a+b+c);
    });
    server.emit('custom','asd','fgh','gh');
    Console:
    C:\Users\kingsley\Desktop\新建文件夹> node hello.js
    asdfghgh

    获取指定事件的事件处理函数的数量

    • EventEmitter.listenerCount(emitter,event)
    var http=require('http');
    var events=require('events');//引入events模块
    var server=http.createServer();
    server.on('custom',function(a,b,c){
    console.log(a+b+c);
    });
    server.emit('custom','asd','fgh','gh');
    console.log(events.EventEmitter.listenerCount(server,'custom'));
    Console:
    C:\Users\kingsley\Desktop\新建文件夹> node hello.js
    asdfghgh1
    

    EventEmitter类自身所拥有的事件

    任何时候,当对继承了EventEmitter类的子类实例对象绑定/取消事件处理函数时,都将触发EventEmitter类的newListener/removeListener事件。

    emitter.on('newListener',function(e,f) {      })
    emitter.on('removeListener',function(e,f) {      })
    //e是被绑定的事件名,f是被绑定的事件处理函数代码

    例子:

    var http=require('http');
    var events=require('events');//引入events模块
    var server=http.createServer();
    server.on('newListener',function(e,f){
    console.log(e+'事件+了一个事件处理函数');
    console.log(f);
    });
    server.on('removeListener',function(e,f){
    console.log(e+'事件-了一个事件处理函数');
    console.log(f);
    });
    function test(){
    console.log('hello world');}
    server.on('custom',test);
    server.removeListener('custom',test);
    Console:
    C:\Users\kingsley\Desktop\新建文件夹> node hello.js
    removeListener事件+了一个事件处理函数
    [Function]
    custom事件+了一个事件处理函数
    [Function: test]
    custom事件-了一个事件处理函数
    [Function: test]
    PS C:\Users\kingsley\Desktop\新建文件夹>

    模块

    从模块外部访问模块内的成员

    “单纯”访问
    • exports对象
    将模块定义为类
    • module.exports
    //hello.js
    var _name,_age;
    var name='',age=3;
    var foo=function(name1,age1){
    _name=name1;
    _age=age1;
    }
    foo.prototype.age=age;
    module.exports=foo;//导出类
    //index.js
    var foo=require('./hello.js');
    var object=new foo("jack",20);
    console.log(object._age);	//undefined(因为没有用prototype,所以是私有变量)
    console.log(object.age);	//3
    • 点赞
    • 收藏
    • 分享
    • 文章举报
    kingsleyljc 发布了12 篇原创文章 · 获赞 1 · 访问量 171 私信 关注
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: