一、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');

nj09---util、inherits、inspect、events、error的更多相关文章

  1. Ionic3,装饰器(@Input、@ViewChild)以及使用 Events 实现数据回调中的相关用法(五)

    标题栏的渐变效果 使用到的相关装饰器.Class以及相关方法:@Input.@ViewChild.Content.ionViewDidLoad ① @Input 装饰器:用来获取页面元素自定义属性值. ...

  2. Backbone事件机制核心源码(仅包含Events、Model模块)

    一.应用场景 为了改善酷版139邮箱的代码结构,引入backbone的事件机制,按照MVC的分层思想搭建酷版云邮局的代码框架.力求在保持酷版轻量级的基础上提高代码的可维护性.   二.遗留问题 1.b ...

  3. 3、docker常用命令:help、镜像命令、容器命令

    1.帮助命令 1.docker version 2.docker info 3.重点掌握:docker --help 2.镜像命令 1.docker,镜像,容器关系 2.docker images ( ...

  4. Spring学习总结(二)——静态代理、JDK与CGLIB动态代理、AOP+IoC

    一.为什么需要代理模式 假设需实现一个计算的类Math.完成加.减.乘.除功能,如下所示: package com.zhangguo.Spring041.aop01; public class Mat ...

  5. Android 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB

    Android虚拟机Dalvik Dalvik冲击 随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不过,其中的一个话题在J ...

  6. Java集合概述、Set集合(HashSet类、LinkedHashSet类、TreeSet类、EnumSet类)

    Java集合概述.Set集合(HashSet类.LinkedHashSet类.TreeSet类.EnumSet类) 1.Java集合概述1)数组可以保存多个对象,但数组长度不可变,一旦在初始化数组时指 ...

  7. [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别 、remove()区别

    清空元素html("").innerHTML="" 与 empty()的区别 一.清空元素的区别     1.错误做法一:           $(" ...

  8. 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享

    本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头 ...

  9. 基于Springboot集成security、oauth2实现认证鉴权、资源管理

    1.Oauth2简介 OAuth(开放授权)是一个开放标准,允许用户授权第三方移动应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容,OAu ...

  10. Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转

    本文目前提供:LocalDateTime获取时间戳(毫秒/秒).LocalDateTime与String互转.Date与LocalDateTime互转 文中都使用的时区都是东8区,也就是北京时间.这是 ...

随机推荐

  1. 在Action中获取servlet API

    Struts2的Action组件是不依赖servlet API 的.那么当你在action中的业务需要处理HttpServletRequest和HttpServletResponse的时候(比如要对响 ...

  2. [Ubuntu]安装中文输入法

    安装了英文版的Ubuntu12.04之后.使用ctrt+space无法切换到中文,才反应过来. 于是查询了下怎么在Ubuntu下安装和配置中文输入法. 第一步安装语言包: 在左側的菜单条中点击 sys ...

  3. iOS开发中的NSDateFormatter日期格式解析总结

    在工作中,常常遇到将时间解析出来转换成自己相应要求的时间格式,之前也有收集相应的转换格式,如今将自己收集的一部分了做个分享,应该比較完好了,欢迎大家继续补充 年 y 将年份 (0-9) 显示为不带前导 ...

  4. 从QQ聊天看交流的有效性

    首先让我们看一则约10分钟的QQ群聊天记录.截图例如以下.已经进行了隐私保护. 交流的主体为大二的在校生与刚刚毕业的学长之间的对话,学长參加过培训,在校学弟想了解一下.故有了以下的交流.(从上到下,从 ...

  5. Windows下ElasticSearch及相关插件的安装

    (1)在官网下载ElasticSearch压缩包.这里我下载的是elasticsearch-1.7.1(下载地址:https://download.elastic.co/elasticsearch/e ...

  6. bzoj1218: [HNOI2003]激光炸弹(DP二维前缀和)

    1218: [HNOI2003]激光炸弹 题目:传送门 题解: 一道经典题目啊... 为了更好的操作...把整个坐标系向右上角移动,从(1,1)开始 那么f[i][j]统计一下以(i,j)作为右上角, ...

  7. php设计模式适配器模式

    php设计模式适配器模式 简介 适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的.一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起. 其实就是通过一个转换类,这个转 ...

  8. 正则表达式匹配 C++实现 java实现 leetcode系列(十一)

    给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符 '*' 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串  ...

  9. Codeforces 659F Polycarp and Hay 并查集

    链接 Codeforces 659F Polycarp and Hay 题意 一个矩阵,减小一些数字的大小使得构成一个连通块的和恰好等于k,要求连通块中至少保持一个不变 思路 将数值从小到大排序,按顺 ...

  10. 51nod 1268 和为K的组合 dfs

    题目: 1268 和为K的组合 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 给出N个正整数组成的数组A,求能否从中选出若干个,使他们的和为K.如果可以,输出:& ...