有没有办法影响console.log提供自定义对象? 我试图覆盖但不起作用的customObject.prototype.toString方法。
有什么想法吗?
答案 0 :(得分:17)
在node.js中,console.log
在每个参数上调用util.inspect
而没有格式化占位符。因此,如果在对象上定义inspect(depth, opts)
方法,则会调用它来获取对象的自定义字符串表示。
例如:
function Custom(foo) {
this.foo = foo;
}
Custom.prototype.inspect = function(depth, opts) {
return 'foo = ' + this.foo.toUpperCase();
};
var custom = new Custom('bar');
console.log(custom);
输出:
foo = BAR
或使用课程:
class Custom {
constructor(foo) {
this.foo = foo;
}
inspect(depth, opts) {
return 'foo = ' + this.foo.toUpperCase();
}
}
var custom = new Custom('bar');
console.log(custom);
答案 1 :(得分:7)
在较新版本的node中已弃用了先前的答案。现在需要实现的方法是符号[util.inspect.custom]
。
例如:
const util = require('util');
class Custom {
constructor(foo, bar) {
this.foo = foo;
this.bar = bar;
}
[util.inspect.custom](depth, opts) {
return this.foo + this.bar;
}
}
console.log(new Custom(3, 5)); // Prints '8'