定制我的对象是如何显示在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
这根本没用,因为我看不到x
和y
的值。 我可以做一个自定义函数来记录x
和y
,但那不会很好,我会失去扩展对象并在里面导航的有用可能性(想象更复杂的对象,Pos仅仅是一个例子)。
如果是在C#中,我会重写ToString(),然后Visual Studio会自动在调试器中使用它来显示我的对象。
在JS中,但是实现toString似乎没有任何帮助。有没有办法在控制台中轻松地看到我的对象的x
和y
?
答
您可以在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#中的好,特别是如果我有很多值来查看,但总比没有好。谢谢。 –
chrome已经向您显示x和y值,它们是函数。如果你想得到getters,就使用getters;例如:'get x(){return _x; },否则,没有链接到执行该方法的私有变量,因为显而易见的原因,控制台不会这样做。 – dandavis
@dandavis有趣的是,我不知道JS中有getter。让我检查一下这是否有效。 –
是的,很多编码员忽略了他们,但他们被添加到ES5中,现在在任何地方工作(ie8 +)。 – dandavis