一、util全局变量
1.util.inherits(constructor,superConstructor)
此方法是一个实现对象间原型继承的函数。javaScript通过原型赋值来实现继承,细节可参考云哥JS高级视频(原型)。
案例看 util/inherits.js
定义了一个基础对象Base,原型方法为showName,使用Sub对象继承与Base,可访问showName方法。
案例:inherits.js
2.util.inspect(object,[showHidden],[depth],[colors])
此方法是一个将任意对象转换为字符串的方法,通常用于调试和错误输出,它至少接受一个参数object。
参数:object,即要转换的对象.
showHidden 是一个可选参数,如果值为true,将会输出更多隐藏信息.
depth 标识最大的递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多少。默认为2层,指定为null打印出来全部
如果color为true,输出格式将会以ANSI颜色编码,通常用于在终端显示更漂亮的效果。
案例:inspect.js
可参考:http://nodejs.org/api/Utilities.html
二、事件驱动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的事件对象设置监听器,避免遇到错误后整合程序崩溃,例如:
3.继承EventEmitter
大多数时候我们不会直接使用EventEmitter,而是在对象中继承它,包括fs,net,http 在内的。只要是支持事件相应的核心模块都是EventEmitter的子类。
为什么这样做呢?
1.具有某个实体功能的对象实现事件的符合语义,事件的监听和发射应该是一个对象的发放。
2.javaScript的对象机制基于原型,支持部分多重继承,继承EventEmitter不会打乱对象原有的继承关系
var util=require('util');
function Base(){
var ee = "ee";//var声明的变量不会被对象访问
this.name='base';
this.base=2012;
this.sayHello=function(){
console.log('hello '+this.name+' this year is '+this.base);
};
}
Base.prototype.showName=function(){
console.log(this.name);
}
Base.prototype.abc="abc"; function Sub(){
this.name='sub';
}
util.inherits(Sub,Base);//只能继承原型的
var objBase=new Base();
objBase.showName();//base
objBase.sayHello();//hello base this year is 2012
console.log(objBase);//Base{name:'base',base:2012,sayHello:[Function]},不打印原型的东西 var objSub=new Sub();
objSub.showName();//sub
//objSub.sayHello();
console.log(objSub.abc);//abc
console.log(objSub);//Sub{name:'sub'},不打印原型的东西
var util=require('util');
function Person(){
this.name='marico';
this.toString=function(){
return this.name;
}
}
var obj=new Person();
console.log(util.inspect(obj));//Person { name: 'marico', toString: [Function] }
console.log(util.inspect(obj,true,2,true));/*
Person {
name: 'marico',
toString:
{ [Function]
[length]: 0,
[name]: '',
[arguments]: null,
[caller]: null,
[prototype]: { [constructor]: [Circular] } } }
*/
var events=require('events');
var emitter=new events.EventEmitter();
emitter.on('someEvent',function(arg1,arg2){
console.log('Listener1',arg1,arg2);
});
emitter.on('someEvent',function(arg1,arg2){
console.log('Listener2',arg1,arg2);
});
emitter.emit('someEvent','marico',1991);//Listener1 marico 1991
//Listener2 marico 1991
var events=require('events');
var emitter=new events.EventEmitter();
emitter.emit('error');

最新文章

  1. fluent批量处理——模型参数的设置
  2. (哈夫曼树)HuffmanTree的java实现
  3. Ehcache 缓存使用
  4. 分布式搜索引擎Elasticsearch的查询与过滤
  5. Iptables工作原理使用详解
  6. 线性表(一)——数组循环右移算法
  7. 《JAVA与模式》之策略模式
  8. Mac 将mysql路径加入环境变量
  9. 国内外开源与 SaaS ,团队协作平台、项目管理工具整理
  10. listagg( ) within group ( order by ) 与 wm_concat
  11. div border-radius画圆
  12. python2 和3的区别
  13. JSP servlet的配置与使用
  14. ERP中通过自定义单打开流程图
  15. Android 自定义控件 轻松实现360软件详情页
  16. hive函数--编码解码
  17. @vue/cli 构建得项目eslint配置
  18. 性能工具之JMeter+InfluxDB+Grafana打造压测可视化实时监控【转】
  19. java基本数据结构和算法
  20. JS报错修改日记(1):Uncaught ReferenceError: showQRcode is not defined

热门文章

  1. 【codeforces 734F】Anton and School
  2. jquery-layer.closeAll不执行的错觉
  3. phpstorm 或 webstorm 设置打开多个项目,多个项目并存。
  4. 8.boost_array_any
  5. android实现自动安装
  6. 集合类 ArrayList实现公司职员薪水管理
  7. solarwinds之数据库
  8. 「JavaSE 重新出发」02.02 引用数据类型
  9. SpringMVC-注解映射器和适配器_20190323
  10. 1、Windows服务器 VS Linux服务器