对象的自定义检查函数


🌐 Custom inspection functions on objects

版本历史
版本变更
v17.3.0, v16.14.0

The inspect argument is added for more interoperability.

v0.1.97

新增于: v0.1.97

对象也可以定义它们自己的 [util.inspect.custom](depth, opts, inspect) 函数,util.inspect() 在检查对象时会调用该函数并使用其返回结果。

🌐 Objects may also define their own [util.inspect.custom](depth, opts, inspect) function, which util.inspect() will invoke and use the result of when inspecting the object.

import { inspect } from 'node:util';
class Box {
 constructor(value) {
 this.value = value;
 }
 [inspect.custom](depth, options, inspect) {
 if (depth < 0) {
 return options.stylize('[Box]', 'special');
 }
 const newOptions = Object.assign({}, options, {
 depth: options.depth === null ? null : options.depth - 1,
 });
 // Five space padding because that's the size of "Box< ".
 const padding = ' '.repeat(5);
 const inner = inspect(this.value, newOptions)
 .replace(/\n/g, `\n${padding}`);
 return `${options.stylize('Box', 'special')}< ${inner} >`;
 }
}
const box = new Box(true);
console.log(inspect(box));
// "Box< true >"const { inspect } = require('node:util');
class Box {
 constructor(value) {
 this.value = value;
 }
 [inspect.custom](depth, options, inspect) {
 if (depth < 0) {
 return options.stylize('[Box]', 'special');
 }
 const newOptions = Object.assign({}, options, {
 depth: options.depth === null ? null : options.depth - 1,
 });
 // Five space padding because that's the size of "Box< ".
 const padding = ' '.repeat(5);
 const inner = inspect(this.value, newOptions)
 .replace(/\n/g, `\n${padding}`);
 return `${options.stylize('Box', 'special')}< ${inner} >`;
 }
}
const box = new Box(true);
console.log(inspect(box));
// "Box< true >"

自定义 [util.inspect.custom](depth, opts, inspect) 函数通常返回一个字符串,但也可以返回任何类型的值,util.inspect() 会相应地格式化该值。

🌐 Custom [util.inspect.custom](depth, opts, inspect) functions typically return a string but may return a value of any type that will be formatted accordingly by util.inspect().

import { inspect } from 'node:util';
const obj = { foo: 'this will not show up in the inspect() output' };
obj[inspect.custom] = (depth) => {
 return { bar: 'baz' };
};
console.log(inspect(obj));
// "{ bar: 'baz' }"const { inspect } = require('node:util');
const obj = { foo: 'this will not show up in the inspect() output' };
obj[inspect.custom] = (depth) => {
 return { bar: 'baz' };
};
console.log(inspect(obj));
// "{ bar: 'baz' }"

AltStyle によって変換されたページ (->オリジナル) /