Node.js学习--基础知识(6)--常用工具util和事件EventEmitter
2015-06-15 18:46
1101 查看
一、util全局变量
1.util.inherits(constructor,superConstructor)
此方法是一个实现对象间原型继承的函数。javascript通过原型赋值来实现继承。
案例:util/inherits.js
输出结果:
定义了一个基础对象Base,原型方法为showName,使用Sub对象继承与Base,可访问showName方法。
2.util.inspect(object[showHidden],[depth],[colors])
此方法是一个将任意对象转换为字符串的方法,通常用于调试和错误输出,它至少接受一个参数object。
参数:object,即要转换的对象
showHidden是一个可选参数,如果值为true,将会输出更多隐藏信息。
depth标示最大的递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。默认为2层,指定null打印出来全部。
如果color为true,输出个数将会以ANSI颜色编码,通常用在终端显示更漂亮的效果。
案例:inspect.js
输出结果:
二、事件驱动events
events是Node.js最重要的模板,原因是Node.js本身架构就是时间式的,而它提供了唯一的接口。所以开成Node.js事件编程的基石。
events模块不仅用于用户代码与Node.js下层事件循环的交互,还几乎被所有的模块依赖。
1.时间发射器
events模块只提供了一个对象。events.EventEmitter。EventEmitter的核心就是事件发射与时间监听器功能的封装。EventEmitter的每个事件由一个事件或若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter支持若干个事件监听器。当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
案例:events.js
输出结果:
常用API的方法介绍:
(1)EventEmitter.on(event,listener)为指定事件注册一个监听器,接受一个字符串event和一个回调函数listener
(2)EventEmitter.emit(event,[arg1],[arg2]...)触发event事件,传递若干可选参数到事件监听的参数表
(3)EventEmitter.once(event,listener)为指定事件注册一个单词监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。
(4)EventEmitter.removeListener(event,listener)移除指定事件的某个监听器,listener必须是该事件已经注册过的监听器。
(5)EventEmitter.removeAllListeners([event])移除所有事件的所有监听器,如果指定event,则移除指定事件的所有监听器。
具体的请参见: http://nodejs.org/api/events.html
2.error事件
EventEmitter 定义了一个特殊的事件 error,它包含了“错误”的语义,我们在遇到异常的时候通常会发射 error 事件。当 error 被发射时,EventEmitter 规定如果没有响应的监听器,Node.js
error.js
输出结果:
3.继承 EventEmitter
大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。
为什么要这样做呢?
1.具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。
2.JavaScript 的对象机制是基于原型的,支持部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。
1.util.inherits(constructor,superConstructor)
此方法是一个实现对象间原型继承的函数。javascript通过原型赋值来实现继承。
案例:util/inherits.js
var util=require('util'); function Base(){ this.name='base'; //公有的属性,实例化后可以直接访问 //var code 这种是不能直接访问的 this.base=2012; this.sayHello=function(){ console.log('Hello '+this.name+' this year is '+this.base); }; } Base.prototype.showName=function(){ //原型链的方法扩展一个showName方法 console.log(this.name); } function Sub(){ this.name='sub'; } util.inherits(Sub,Base); //sub继承于Base,只能继承showName,不能继承sayHello //原有输出 var objBase= new Base(); objBase.showName(); objBase.sayHello(); console.log(objBase); //继承后的子类输出 var objSub=new Sub(); objSub.showName(); //子类覆盖了父类 //objSub.sayHello(); //子类中没有这个方法 console.log(objSub);
输出结果:
定义了一个基础对象Base,原型方法为showName,使用Sub对象继承与Base,可访问showName方法。
2.util.inspect(object[showHidden],[depth],[colors])
此方法是一个将任意对象转换为字符串的方法,通常用于调试和错误输出,它至少接受一个参数object。
参数:object,即要转换的对象
showHidden是一个可选参数,如果值为true,将会输出更多隐藏信息。
depth标示最大的递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。默认为2层,指定null打印出来全部。
如果color为true,输出个数将会以ANSI颜色编码,通常用在终端显示更漂亮的效果。
案例:inspect.js
var util=require('util'); function Person(){ this.name='Tom'; this.toString=function(){ return this.name; } } var obj=new Person(); console.log(util.inspect(obj)); console.log(util.inspect(obj,true,2,true));
输出结果:
二、事件驱动events
events是Node.js最重要的模板,原因是Node.js本身架构就是时间式的,而它提供了唯一的接口。所以开成Node.js事件编程的基石。
events模块不仅用于用户代码与Node.js下层事件循环的交互,还几乎被所有的模块依赖。
1.时间发射器
events模块只提供了一个对象。events.EventEmitter。EventEmitter的核心就是事件发射与时间监听器功能的封装。EventEmitter的每个事件由一个事件或若干个参数组成,事件名是一个字符串,通常表达一定的语义。对于每个事件,EventEmitter支持若干个事件监听器。当事件发射时,注册到这个事件的事件监听器被依次调用,事件参数作为回调函数参数传递。
案例:events.js
var events=require('events'); //实例化事件对象 var emitter=new events.EventEmitter(); //注册事件监听1 emitter.on('someEvent',function(arg1,arg2){ console.log('listener1',arg1,arg2); }); //注册事件监听2 emitter.on('someEvent',function(arg1,arg2){ console.log('listener2',arg1,arg2); }); //触发事件 emitter.emit('someEvent','Tome',1991);
输出结果:
常用API的方法介绍:
(1)EventEmitter.on(event,listener)为指定事件注册一个监听器,接受一个字符串event和一个回调函数listener
(2)EventEmitter.emit(event,[arg1],[arg2]...)触发event事件,传递若干可选参数到事件监听的参数表
(3)EventEmitter.once(event,listener)为指定事件注册一个单词监听器,即监听器最多只会触发一次,触发后立刻解除该监听器。
(4)EventEmitter.removeListener(event,listener)移除指定事件的某个监听器,listener必须是该事件已经注册过的监听器。
(5)EventEmitter.removeAllListeners([event])移除所有事件的所有监听器,如果指定event,则移除指定事件的所有监听器。
具体的请参见: http://nodejs.org/api/events.html
2.error事件
EventEmitter 定义了一个特殊的事件 error,它包含了“错误”的语义,我们在遇到异常的时候通常会发射 error 事件。当 error 被发射时,EventEmitter 规定如果没有响应的监听器,Node.js
会把它当作异常,退出程序并打印调用栈。我们一般要为会发射 error事件的对象设置监听器,避免遇到错误后整个程序崩溃。
error.jsvar events=require('events'); var emitter=new events.EventEmitter(); emitter.emit('error');
输出结果:
3.继承 EventEmitter
大多数时候我们不会直接使用 EventEmitter,而是在对象中继承它。包括 fs、net、http 在内的,只要是支持事件响应的核心模块都是 EventEmitter 的子类。
为什么要这样做呢?
1.具有某个实体功能的对象实现事件符合语义,事件的监听和发射应该是一个对象的方法。
2.JavaScript 的对象机制是基于原型的,支持部分多重继承,继承 EventEmitter 不会打乱对象原有的继承关系。
相关文章推荐
- Swap Nodes in Pairs
- Swap Nodes in Pairs
- Java for LeetCode 222 Count Complete Tree Nodes
- Reverse Nodes in k-Group
- Node.js学习
- Node.js学习--基础知识(8)--全局对象和全局变量
- Hadoop 2.0 NameNode HA和Federation实践
- 【转】nodejs 模块加载
- Node.js学习--基础知识(5)--npm
- nodejs 中压缩/解压方案
- Angular Material串串学客户端开发 2 - Node.js模块加载机制Require()
- node.js 初体验
- Node.js+Yeoman构建前端自动化Web应用
- HDU 4587 Two Nodes、POJ 2375 Reliable Nets (Tarjan)
- Clone Graph Leetcode 133
- DOM Nodes
- leetcode--Populating Next Right Pointers in Each Node
- Swap Nodes in Pairs
- 文件系统(一)--super.c bitmap.c inode.c 源码分析
- Swap Nodes in Pairs