从console.log()自定义文本

时间:2014-03-06 22:34:18

标签: javascript

在Ruby中,我们有#inspect,如果被覆盖,则会将p函数的输出从#<Vector:0x00000000b5e2a8>更改为自定义字符串。

在Javascript中,使用console.log()时默认的对象到字符串转换在Chrome中通常非常好(它是可点击的,语法突出显示的JSON),但在某些情况下它不太方便。有没有办法以类似于Ruby的#inspect

的方式更改文本表示

例如,我想转换此

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

简单地Vector(0, 0)

2 个答案:

答案 0 :(得分:1)

您可以添加自定义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);

答案 1 :(得分:0)

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

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

console.dirxml(testObj);

产生

Object {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"}