欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 前端技术 > javascript >内容正文

javascript

NodeJS学习笔记(四) events,util模块

发布时间:2025/6/17 javascript 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 NodeJS学习笔记(四) events,util模块 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

开发指南中讲到的node核心模块有events,util,fs,http。介于篇幅的原因,在这里我想分两个次总结笔记。

Events模块

Events是node最重要的模块。Nodejs本身架构就是基于事件的。

Event.EventEmitter

    àEventEmitter.on(event,listener) //注册一个时间,事件名为event,相应事件的回调函数为listener

    à EventEmitter.emit(event,[arg1],[arg2],[…])//args为发射已注册的事件event,并传递若干个args参数

    à EventEmitter.once(event,listener)//单词监听事件,时间最多只能触发一次,出发后该注册的event时间会解除监听

    à EventEmitter.removeListrner(event,listener)//解除已监听了的事件

    à EventEmitter.removeListrner(event,listener)

Node中已经有定义好的事件,比如说error事件。当error被发射时(emit),如果eventEmitter没有响应的监听器,node会把它当作一场,并退出程序打印调用栈

  • 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', 'wenlonghor', 'helloWorld');
  • 上面代码中定义了两个同名的someEvent事件。Node会根据两个时间的监听器调用相关回调函数。

    打印结果

    通常情况下,不会直接使用EventEmitter,而是使用继承他的方式。

    Util模块

    文中讲到了util的两个API:util.inherits和util.inspect

    util.inherits:

    util.inherits(constructor,superConstructor).这个是node包装好的用于实现继承的方法。在javascript中的继承和java中的不太一样。开发指南中对它的解释挺有意思:

    "基于类的语言中类就像一个模具,对象有这个模具浇注产生,而基于原型的语言中,原想就好像一件艺术品的原件,我们通过以太100%精确的机器把这个原件复制出很多分"

    Node包装好的这个继承只能继承父类中在原型中定义的函数:

  • var util = require('util');
  • function Base() {
  •   this.name = 'base';
  •   this.base = 1991;
  •   this.sayHello = function() {
  •     console.log('Hello ' + this.name);
  •   };
  • }
  • 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);
  • 结果:

    可以看到,使用过原型定义的函数shouName能够正常输出。代码段中26行把sayHello()注释掉,因为sub中没有继承到base的sayHello()方法,会抛出异常:

    这当然不是这两个API的全部用法,只是适用于初学node掌握node的特性。由于node是异步的方式,在多事件写作的时候会有控制流的问题。以后深入研究后会在这里补上笔记!

    Util.inspect

    在我理解看来,这个方法有点像java里面的toString()

    Util.inspect(Object,[shouHidden],[depth],[colors])

    Object:既要转换的对象

    showHidden:如果设置为true,相识更多隐藏信息

    depth:表示最大递归的层数。如果不指定,默认递归两层。指定为null,不限制层数的递归

    color:用于显示颜色

    下面用一个例子展现

    转载于:https://www.cnblogs.com/wenlonghor/p/3309527.html

    总结

    以上是生活随笔为你收集整理的NodeJS学习笔记(四) events,util模块的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。