Javascript 从console.log()自定义文本

Javascript 从console.log()自定义文本,javascript,Javascript,在Ruby中,我们有#inspect,如果重写它,将p函数的输出从类似#的内容更改为自定义字符串 在Javascript中,使用console.log()时的默认对象到字符串转换在Chrome中通常非常好(它是可单击的,语法突出显示的JSON),但在某些情况下并不方便。有没有一种方法可以像Ruby的#inspect那样更改文本表示 例如,我想将其转换为 Vector {x: 0, y: 0, add: function, subtract: function, ...} 要简单地Vector(

在Ruby中,我们有
#inspect
,如果重写它,将
p
函数的输出从类似
#
的内容更改为自定义字符串

在Javascript中,使用
console.log()
时的默认对象到字符串转换在Chrome中通常非常好(它是可单击的,语法突出显示的JSON),但在某些情况下并不方便。有没有一种方法可以像Ruby的
#inspect
那样更改文本表示

例如,我想将其转换为

Vector {x: 0, y: 0, add: function, subtract: function, ...}

要简单地
Vector(0,0)

您可以添加一个自定义
toString
方法:

Vector.prototype.toString = function(){ return 'Vector('+this.x+','+this.y+')'; };
console.log(vector+'');
也可以使用自定义日志功能:

function log(vector){ console.log('Vector('+vector.x+','+vector.y+')'); }
log(vector);

在Chrome中,您可以尝试
console.dirxml()
。对于HTML元素,它会打印一个可扩展的树结构,但对于常规JavaScript对象,它会从属性中创建一个字符串。例如:

var testObj = { test: 'value', 'test 2': 'abc' };

console.dirxml(testObj);
产生:

Object {test: "value", test 2: "abc"} 
{
    "test": "value",
    "test 2": "abc"
} 
另一个建议是将对象包装在
JSON.stringify
调用中,例如:

console.log(JSON.stringify(testObj, null, 4));
产生:

{
    "test": "value",
    "test 2": "abc"
} 
或者将第二个和第三个参数放到
stringify
,这将为您提供:

{"test":"value","test 2":"abc"} 

您可以重写
toString
方法,然后重写
console.log(obj.toString())
。您可能希望使用控制台继续阅读。@RocketHazmat这似乎是我能找到的最接近的方法。但上述两种方法都需要修改
console.log()
调用。使用
console.log()
时,Chrome不使用“对象到字符串”转换。“我想只有IE才会这么做。”“你说得对,我的错。”。我唯一的其他建议是类似于
console.log(JSON.stringify(obj,null,4))