自定义我的对象在JS控制台中的显示方式

时间:2016-07-05 20:11:40

标签: javascript debugging console.log

我已经实现了这个不可变的Pos对象:

var Pos = function(x, y) {
    var _x = x;
    var _y = y;
    return {
        x: function() { return _x; },
        y: function() { return _y; },
    };
}

现在,当我将new Pos(5, 7)写入控制台时,它显示如下:

▶ Object {x: function, y: function} // Chrome
Object { x: Pos/<.x(), y: Pos/<.y() } // Firefox

这根本没用,因为我看不到xy的值。 我可以创建一个自定义函数来记录xy,但这真的不会那么好,我会失去扩展对象并在里面导航的有用可能性(想象一下更复杂的对象,Pos只是一个例子。)

如果是在C#中,我只是重写ToString(),然后Visual Studio会在调试器中自动使用它来显示我的对象。

在JS中,实现toString似乎没有任何帮助。有没有办法在控制台中轻松查看我的对象xy

1 个答案:

答案 0 :(得分:2)

您可以使用ES5 getter在Chrome中获得更好的控制台行为,也许是其他人:

function Pos(x, y) {
    return {
        get x() { return x; },
        get y() { return y; },
    };
}
console.log( Pos(1,5) );

为了避免可能浪费的cpu,chrome不会在控制台中对吸气剂进行计算,直到你点击它为止,但至少你需要做的就是这样。除此之外,您必须制作自己的记录器方法,或使用完全自定义的对象。