2016-07-05 103 views
1

我已經實現了這個不變的名次對象:定製我的對象是如何顯示在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

回答

2

您可以在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#中的好,特別是如果我有很多值來查看,但總比沒有好。謝謝。 –

相關問題