Node基础学习(二十五):Node的常用工具

本文深入探讨了Node.js核心模块util的功能,包括将异步函数转换为回调风格、实现对象间原型继承,以及将任意对象转换为字符串的方法,适用于调试和错误输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Node基础学习系列
上一篇:Node基础学习(二十四):Node的全局对象

util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心 JavaScript 的功能 过于精简的不足。

const util = require('util');

util.callbackify

util.callbackify(original) 将 async 异步函数(或者一个返回值为 Promise 的函数)转换成遵循异常优先的回调风格的函数,例如将 (err, value) => … 回调作为最后一个参数。 在回调函数中,第一个参数为拒绝的原因(如果 Promise 解决,则为 null),第二个参数则是解决的值。

const util = require('util');

async function fn() {
    return 'hello world';
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
    if (err) {
        throw err;
    }
    console.log(ret);
});

util.inherits

util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。
JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript 没有提供对象继承的语言级别特性,而是通过原型复制来实现的。

const 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);
let objBase = new Base();
objBase.showName();     //base
objBase.sayHello();     //Hello base
console.log(objBase);   //Base { name: 'base', base: 1991, sayHello: [Function] }
let objSub = new Sub();
objSub.showName();      //sub
console.log(objSub);    //Sub { name: 'sub' }

util.inspect

util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息。
depth 表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多 少。如果不指定depth,默认会递归 2 层,指定为 null 表示将不限递归层数完整遍历对象。 如果 colors 值为 true,输出格式将会以 ANSI 颜色编码,通常用于在终端显示更漂亮 的效果。
特别要指出的是,util.inspect 并不会简单地直接把对象转换为字符串,即使该对象定义了 toString 方法也不会调用。

const util = require('util');
function Person() {
    this.name = 'zhangsan';
    this.toString = function() {
        return this.name;
    };
}
let obj = new Person();
console.log(obj);       //Person { name: 'zhangsan', toString: [Function] }
console.log(util.inspect(obj));     //Person { name: 'zhangsan', toString: [Function] }
console.log(util.inspect(obj, true));
//Person {
//   name: 'zhangsan',
//   toString: [Function] {
//     [length]: 0,
//     [name]: '',
//     [arguments]: null,
//     [caller]: null,
//     [prototype]: { [constructor]: [Circular] }
//   }
// }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值