如何在nodejs调试控制台中更改对象实例的字符串表示。是否有一种方法(类似于.NET中的toString()
)可以重写?
考虑以下代码:
class SomeObject{
constructor(){
this._varA = "some text";
this._varB = 12345;
this._varC = "some more text";
this._varD = true;
this._varE = 0.45;
}
toString(){
return "custom textual rapresentation of my object";
}
}
var array = [];
array.push(new SomeObject());
array.push(new SomeObject());
array.push(new SomeObject());
console.log(array);
这将产生以下结果:
![在此输入图片描述](https://istack.dev59.com/obIn9.webp)
toString()
方法会显示 toString()
的结果(在上面的示例中是 "custom textual representation of my object"
),而不是由调试器创建的动态文本表示(在上面的示例代码中,这是: SomeObject {_varA: "some text", _varB: 12345, _varC: "some more text", …}
)- 当没有定义自定义替代时,我毫不怀疑它非常有用。我也意识到
console.log(array.toString());
或者甚至 console.log(array.map(t=>t.toString()));
会产生类似于我想要的东西,但这样做会阻止我使用调试导航来浏览对象图。如果这不可能,其他人是否会从中受益? 如果有足够的兴趣,我可以考虑将其定义和实现为一个功能。
array.forEach(t=>{console.log(t.toString() + ":",t)});
。虽然不是理想的解决方案,但我们可以创建一个节点模块来处理这种情况。例如,创建一个可以检查参数并根据类型进行操作的模块 :) - GuyTSomeObject { "自定义文本表示我的对象" }
而不是SomeObject {_varA: "一些文本", _varB: 12345, _varC: "更多文本", …}
。 - Leoarray.forEach( el => {console.groupCollapsed(el.toString()); console.log(el); console.groupEnd();});
。附注:我确实理解你设想的解决方案.. ;) - GuyT