node.js util全局变量和事件驱动events

一、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不会打乱对象原有的继承关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/509941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Phoenix 关联查询异常 , MaxServerCacheSizeExceededException phoenix.query.maxServerCacheBytes

参数配置说明:http://phoenix.apache.org/tuning.html Join:http://phoenix.apache.org/joins.html 从设计角度来讲,尽可能的不使用phoenix进行关联查询,速度比直接根据条件查询慢很多很多 测试关联,异常如下 Error:…

面试时,你会问面试官哪些问题?

明天又要去参加一次面试。每次面试的时候,面试官都会在最后给面试者一些时间,来问问题。这是个非常好的机会,能按照自己的思路,来了解职位、技术、企业文化、福利待遇、企业状况和前景等情况,以弥补前面面试过程中没有…

Phoenix 原理 以及 Phoenix在HBase中的应用

一、前言 业务使用HBase已经有一段时间了,期间也反馈了很多问题,其中反馈最多的是HBase是否支持SQL查询和二级索引,由于HBase在这两块上目前暂不支持,导致业务在使用时无法更好的利用现有的经验来查询HBase。虽然HBase本身不支持…

node.js文件操作

介绍:fs模块是文件操作的封装,它提供了文件的读取,写入,更名,删除,遍历目录,链接POSIX文件系统操作。与其他模块不同的是,fs模块中所有的操作都提供了异步和同步两个版本&#xff0c…

Undo/Redo框架实现

http://www.cnblogs.com/wanghui9072229/archive/2011/08/29/2158960.html

phoenix 使用详细介绍 创建二级索引

phoenix 关联hbase 基本使用参考:https://blog.csdn.net/zhangshenghang/article/details/97491597 Phoenix 创建二级索引 hbase中有表test_article ,在表空间 test_ns ,列簇 fn 下有字段 url , text , uid ,name 连接phoenixphoenix-sqlline.py hostname:2181:/hb…

node.js详解Http服务器

概念:Node.js提供了http模块。其中封装了一个高效的HTTP服务器和一个建议的HTTP客户端。http.server是一个基于事件的HTTP服务器。内部有C实现。接口由JavaScript封装。http.request则是一个HTTP客户端工具。用户向服务器发送请求。一、HTTP服务器 http.Server实现的…

C++面试(六)

二. 面试题 1.自我介绍 2.TCP和UDP的区别 3.简述下项目的流程

node.js http客户端

一、http模块提供了两个函数http.request和http.get,功能是作为客户端向HTTP服务器发起请求。 Ext.Ajax.request({},function(response))1.http.request(options,callback)发起HTTP请求,接受两个参数,option是一个类似关联数组的对象&#xf…

C++编程日记

1、操作符“ << ”和 “ >> ” 重载必须以内联方式重载&#xff0c;否则编译时报错&#xff0c;原因暂时不详 &#xff01; 2、int** 可以用于动态创建二维数组 &#xff1b; 3、数组定义必须用常量&#xff0c;不可用变量 &#xff01;

CDH kerberos 认证,安全认证

环境centos 7.4 安装KDC服务 yum -y install krb5-server krb5-libs krb5-auth-dialog krb5-workstation 修改配置文件 vi /etc/krb5.conf 默认如下 修改为 # Configuration snippets may be placed in this directory as well includedir /etc/krb5.conf.d/[logging]default…

虚拟继承和虚表

普通继承和虚拟继承类的大小变化&#xff1a; 普通继承&#xff1a; 虚拟继承&#xff1a; 类A和类B大小为&#xff1a; 由此可见&#xff1a;1、类中静态成员不会影…

node.js Express框架入门

一、为什么要用Express框架&#xff1f; Node.js由于不需要另外的HTTP服务器&#xff0c;因此减少了一层抽象&#xff0c;给性能带了不少的提升&#xff0c;同时也因此提高了开发难度&#xff0c;实现一个POST数据的表单&#xff0c;例如&#xff1a;<form><input typ…

Kerberos 基本命令 - 持续更新

授权添加yarn账户 [rootxxx ~]# kadmin.local Authenticating as principal cloudera-scm/adminJAST.COM with password. kadmin.local: addprinc yarnJAST.COM WARNING: no policy specified for yarnJAST.COM; defaulting to no policy Enter password for principal &quo…

equal_range

equal_range 是C STL中的一种二分查找的算法&#xff0c;试图在已排序的[first,last)中寻找value&#xff0c;它返回一对迭代器i和j&#xff0c;其中i是在不破坏次序的前提下&#xff0c;value可插入的第一个位置&#xff08;亦即lower_bound&#xff09;&#xff0c;j则是在不…

Kerberos 下运行spark 报错 Requested user hdfs is not whitelisted and has id 995,which is below the minimu

异常如下 main : run as user is hdfs main : requested yarn user is hdfs Requested user hdfs is not whitelisted and has id 995,which is below the minimum allowed 1000 问题原因&#xff1a;是由于Yarn限制了用户id小于1000的用户提交作业&#xff1b; 解决方法&a…

node.js工程的结构

我们使用express生成了package.json&#xff0c;它只产生了javascript的app.js和routes/index.js。模版引擎ejs有文件index.ejs&#xff0c;此外还有样式表style.css。12讲问题&#xff1a;创建工程时候一直使用jade。要求用ejs一、app.js 工程的入口。 分析代码&#xff1a;/*…

C++面试(七)

1、 谈谈你做过的项目&#xff0c;你主要负责哪个模块&#xff0c;代码量是多大&#xff08;除去VC自动生成的那些代码&#xff09; 2、 参与项目的人数是多少&#xff1f; 5、 谈谈你对C三个特点的理解&#xff08;简单描述一下&#xff09;。 6、 为什么要封装&#xff0c;如…

kerberos 下运行spark 报错 Requested user hdfs is banned

启动运行报错 main : run as user is hdfs main : requested yarn user is hdfs Requested user hdfs is bannedFailing this attempt. Failing the application.ApplicationMaster host: N/AApplicationMaster RPC port: -1queue: root.defaultstart time: 1565170753121fina…

node.js路由控制

一、工作原理 当通过浏览器访问app.js建立的服务器时&#xff0c;会看到一个简单的页面&#xff0c;实际上它已经完成了许多透明的工作&#xff0c;当访问http://localhost:3000&#xff0c;浏览器会向服务器发送请求&#xff0c;包括请求的方法、路径、HTTP协议版本和请求头信…