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
asdfghgh
1
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