nj09---util、inherits、inspect、events、error

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

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/7015000.html,如需转载请自行联系原作者

相关文章
|
JavaScript 前端开发
js中模糊搜索 模糊匹配如何实现?
js中模糊搜索 模糊匹配如何实现?
|
存储 安全 测试技术
C# 中模拟HTTPS提交及模拟文件上传
【1月更文挑战第5天】昨天讲到用C#模拟POST还有GET进行数据提交,如果遇到的是https或者一些特殊信道的提交昨天的代码就会跑不通,今天就来说一下C#中https的提交以及模拟文件上传
|
2月前
|
SQL 存储 数据库
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
SQL Server Management Studio (SSMS) 21 - 微软数据库管理工具
434 0
钉钉宜搭6月15日版本更新:手写签名和定位组件来啦!
本次版本更新主要针对流程、表单进行了组件能力升级,新增了手写签名和定位2个组件,同时升级地址、人员和部门3个组件。
2799 0
钉钉宜搭6月15日版本更新:手写签名和定位组件来啦!
|
4月前
|
机器学习/深度学习 PyTorch 算法框架/工具
飞桨x昇腾生态适配方案:00_整体方案介绍
本文详细介绍PaddlePaddle与NPU的适配工作,涵盖训练与推理支持、性能优化及离线推理方案。PaddleCustomDevice作为适配层,支持主流模型(详见飞桨-昇腾模型列表),多数性能媲美V100,部分调优模型接近0.8*A800。硬件适配主要针对A2芯片,A1兼容但310系列建议离线推理。提供常用模型仓链接及整体方案导览,包括环境准备、算子适配、性能调优和Paddle转ONNX/OM等内容。
231 0
|
XML 数据格式
成功解决:不允许有匹配 “[xX][mM][lL]“ 的处理指令目标。
这篇文章讨论了一个XML解析时出现的错误,错误提示为“不允许有匹配 '[xX][mM][lL]' 的处理指令目标”。文章指出错误原因是配置文件开始位置存在空行,导致XML文档的解析出现问题。解决方法是删除这些空行,之后程序能够成功启动。
成功解决:不允许有匹配 “[xX][mM][lL]“ 的处理指令目标。
|
应用服务中间件 nginx
nginx405异常原因与解决方法,最详细解释
nginx405异常原因与解决方法,最详细解释
856 1
|
监控 Java Unix
|
10月前
|
开发者
鸿蒙next版开发:ArkTS组件通用属性(Popup控制)
在HarmonyOS 5.0中,ArkTS提供了灵活的Popup控制属性,允许开发者创建和管理弹出窗口,用于显示额外信息、提示、表单等,增强用户交互体验。本文详解了Popup控制的通用属性,并提供了示例代码。通过bindPopup方法,可以将弹出窗口绑定到组件上,支持多种用途,如显示额外信息、表单提交和交互反馈。
535 1
|
存储 Java 数据库
DriverManager.getConnection用法总结
DriverManager.getConnection用法总结