定制我的对象是如何显示在JS控制台

问题描述:

我已经实现了这个不变的名次对象:定制我的对象是如何显示在JS控制台

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

+0

chrome已经向您显示x和y值,它们是函数。如果你想得到getters,就使用getters;例如:'get x(){return _x; },否则,没有链接到执行该方法的私有变量,因为显而易见的原因,控制台不会这样做。 – dandavis

+0

@dandavis有趣的是,我不知道JS中有getter。让我检查一下这是否有效。 –

+0

是的,很多编码员忽略了他们,但他们被添加到ES5中,现在在任何地方工作(ie8 +)。 – dandavis

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

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

,以避免可能出现的浪费CPU,Chrome不会calc下在控制台,吸气,直到你点击它,但至少这就是你所要做的。除此之外,您必须制定自己的记录器方法,或使用完全自定义的对象。

+0

好的,getters似乎在控制台中工作,我得到了'▶Object {x:(...),y:(...)}',然后单击(...)展开它以显示值。这不如C#中的好,特别是如果我有很多值来查看,但总比没有好。谢谢。 –