一、util全局变量

1.util.inherits(constructor,superConstructor)
此方法是一个实现对象间原型继承的函数。javaScript通过原型赋值来实现继承,细节可参考云哥JS高级视频(原型)。
案例看  util/inherits.js
定义了一个基础对象Base,原型方法为showName,使用Sub对象继承与Base,可访问showName方法。
案例:inherits.js
var util=require('util');
function Base(){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);
}
function Sub(){this.name='sub';
}
util.inherits(Sub,Base);//此方法是一个实现对象间原型继承的函数
var objBase=new Base();
objBase.showName();
objBase.sayHello();
console.log(objBase);
var objSub=new Sub();
objSub.showName();
//objSub.sayHello();
console.log(objSub);
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='marico';this.toString=function(){return this.name;}
}
var obj=new Person();
console.log(util.inspect(obj));
console.log(util.inspect(obj,true,2,true));
可参考: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
var events=require('events');//获取nodejs模块
var emitter=new events.EventEmitter();//实例化事件发射器
emitter.on('someEvent',function(arg1,arg2){//为指定事件注册一个监听器,接受一个字符串someEvent和一个回调函数console.log('Listener1',arg1,arg2);
});
emitter.on('someEvent',function(arg1,arg2){console.log('Listener2',arg1,arg2);
});
emitter.emit('someEvent','marico',1991);//发射someEvent事件,传递参数到事件监听器的参数表
常用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的事件对象设置监听器,避免遇到错误后整合程序崩溃,例如:
var events=require('events');
var emitter=new events.EventEmitter();
emitter.emit('error');
3.继承EventEmitter
大多数时候我们不会直接使用EventEmitter,而是在对象中继承它,包括fs,net,http   在内的。只要是支持事件相应的核心模块都是EventEmitter的子类。
为什么这样做呢?
1.具有某个实体功能的对象实现事件的符合语义,事件的监听和发射应该是一个对象的发放。
2.javaScript的对象机制基于原型,支持部分多重继承,继承EventEmitter不会打乱对象原有的继承关系

node.js util全局变量和事件驱动events相关推荐

  1. Node.js: 如何继承 events 自定义事件及触发函数

    events 是node.js的核心api ,几乎大部分node.js 的api都继承 events 类(javascript中没有类,也不存在继承,确切说是模拟类和继承,点击查看) 比如我们常见的 ...

  2. 深入浅出Node.js(上)

    (一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟 ...

  3. 使用 node.js 进行服务器端 JavaScript 编程

    node.js 是一个可以使用 JavaScript 开发服务器端应用的平台.它依托于 Google V8 JavaScript 引擎,并采用事件 I/O 的架构,可以用来创建高性能服务器.本文详细介 ...

  4. Node.js自学完全总结

    零.什么是Node.js? 引用Node.js官方网站的解释如下: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript e ...

  5. Node.js高级编程【一】node 基础

    目录 一.Node 基础 1.课程概述 2.Node.js 架构 3.为什么是Node.js ? 4.Node.js 的 异步IO 5.Node.js 主线程是单线程 6.Node.js 应用场景 7 ...

  6. node.js express php,nodejs开发——express路由与中间件

    路由 通常HTTP URL的格式是这样的: http表示协议. host表示主机. port为端口,可选字段,不提供时默认为80. path指定请求资源的URI(Uniform Resource Id ...

  7. html js不触发_「万字整理 」这里有一份Node.js入门指南和实践,请注意查收 ??

    前言 什么是 Node.js 呢 ? JS 是脚本语言,脚本语言都需要一个解析器才能运行.对于写在 HTML 页面里的 JS,浏览器充当了解析器的角色.而对于需要独立运行的 JS,NodeJS 就是一 ...

  8. 深入浅出Node.js

    深入浅出Node.js(一):什么是Node.js [编者按]:Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node. ...

  9. 如何构建自定义 Node.js 事件发射器

    事件是具有软件或硬件意义的动作. 它们是由于用户活动(例如鼠标单击或击键)或直接来自系统(例如错误或通知)而发出的. JavaScript 语言使我们能够通过在事件处理程序中运行代码来响应事件. 由于 ...

最新文章

  1. php和python和java-python与java区别
  2. php 自动创建文件,php:自动创建多级文件夹
  3. 用rate-limit来限制特定用户的流量
  4. Echarts开源可视化库学习(三)主题的使用
  5. 知识图谱学习小组学习大纲
  6. 地理必修一三大类岩石_高一地理必修一知识点总结归纳
  7. 2018-06-22 第四十七天 oracle
  8. mysql replication health is not ok_mysql配置mha高可用防火墙未关闭报错
  9. 计算机应用基础第七章自测题,计算机应用基础 第七章.doc
  10. XSS-Game Level 4
  11. POJ 2723 2-SAT
  12. C++复习 auto
  13. MFC下运行控制台不显示黑屏
  14. 16级大一c语言考试题及答案,2013年计算机二级C语言上机试题十六及答案
  15. 【OEIS】Xor Sum AtCoder2272
  16. 傅里叶变换时域和频域之间的对应关系
  17. springboot集成es实现搜索功能
  18. Sicily 1484. 守望者的逃离
  19. kali初使用之zsh
  20. 泰芯半导体MCU开发工具仿真器

热门文章

  1. sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?
  2. 程序设计作业: 车模+数模 = ?
  3. python methodtype_Python的实例定属性和方法或类绑定方法
  4. java导致native非法指令,Java代码引起的NATIVE野指针问题(上)
  5. wrapper怎么用_用责任链模式设计拦截器
  6. java如何保证redis设置过期时间的原子性_分布式锁用 Redis 还是 Zookeeper
  7. 83998 连接服务器出错_来申请一个阿里云服务器玩玩?
  8. js foreach 跳出循环_VUE.js
  9. java 某年某月中第几周 开始时间和结束时间_重磅!库里又要签下一超级大合同!4年2亿啊!退役时间也定了...
  10. asp.net 将bmp格式图片怎么转换为jpg_Heic图片转换精灵-Heic图片高清转换JPG/PNG/BMP方法...