是否可以重写 JavaScript 的 toString() 函数以提供有意义的调试输出?
2022-08-30 04:20:37
当我在JavaScript程序中放置一个对象时,我只看到 输出 ,这对于弄清楚它是什么对象(甚至是什么类型的对象)并不是很有帮助。console.log()
[object Object]
在 C# 中,我习惯于重写,以便能够自定义对象的调试器表示形式。在JavaScript中我可以做类似的事情吗?ToString()
当我在JavaScript程序中放置一个对象时,我只看到 输出 ,这对于弄清楚它是什么对象(甚至是什么类型的对象)并不是很有帮助。console.log()
[object Object]
在 C# 中,我习惯于重写,以便能够自定义对象的调试器表示形式。在JavaScript中我可以做类似的事情吗?ToString()
您也可以在Javascript中覆盖。请参阅示例:toString
function Foo() {}
// toString override added to prototype of Foo class
Foo.prototype.toString = function() {
return "[object Foo]";
}
var f = new Foo();
console.log("" + f); // console displays [object Foo]
请参阅此讨论,了解如何在 JavaScript 中确定对象类型名称。
首先覆盖对象或原型:toString
var Foo = function(){};
Foo.prototype.toString = function(){return 'Pity the Foo';};
var foo = new Foo();
然后转换为字符串以查看对象的字符串表示形式:
//using JS implicit type conversion
console.log('' + foo);
如果您不喜欢额外的键入,可以创建一个函数,将其参数的字符串表示形式记录到控制台:
var puts = function(){
var strings = Array.prototype.map.call(arguments, function(obj){
return '' + obj;
});
console.log.apply(console, strings);
};
用法:
puts(foo) //logs 'Pity the Foo'
puts(foo, [1,2,3], {a: 2}) //logs 'Pity the Foo 1,2,3 [object Object]'
E2015为这些东西提供了更好的语法,但你必须使用像Babel这样的转译器:
// override `toString`
class Foo {
toString(){
return 'Pity the Foo';
}
}
const foo = new Foo();
// utility function for printing objects using their `toString` methods
const puts = (...any) => console.log(...any.map(String));
puts(foo); // logs 'Pity the Foo'