2016-07-05 2 views
1

JSコンソールに表示される方法をカスタマイズするは私のオブジェクトは、私は、この不変の順位オブジェクトを実装した

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

それは全く役に立ちません。xyの値がわかりません。 私はxyをログに記録するカスタム関数を作ることができましたが、実際にはそれほど良いものではないでしょうし、オブジェクトを展開して内部をナビゲートする便利な可能性を失います(もっと複雑なオブジェクトを想像してください)。

C#の場合は、ToString()をオーバーライドしてから、Visual Studioがオブジェクトを表示するために自動的にデバッガでそれを使用します。

JSでは、toStringの実装はまったく役に立たないようです。私のオブジェクトのxyがコンソールに簡単に見える方法はありますか?

+0

クロムはすでにx値とy値を表示しています。これは関数です。 getterが必要な場合はgettersを使用します。たとえば、次のようになります。 'get x(){return _x; }、それ以外の場合は、メソッドを実行するprivate varへのリンクはありません。コンソールは明白な理由でこれを行いません。 – dandavis

+0

@dandavis興味深いことに、私はJSにゲッターがあることを知らなかった。これが機能するかどうか確認してみましょう。 –

+0

ええ、多くのコーダーがそれらを見落としていますが、ES5で追加されましたが、今ではどこでも動作します(ie8 +)。 – dandavis

答えて

2

あなたはクロームで、より良いコンソールの動作を取得することができ、多分他、使用してES5ゲッター:

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

が可能無駄なCPUを回避するためには、クロムは、あなたがそれをクリックするまで、コンソールでゲッターをカルクしませんが、少なくともあなたがしなければならないことはすべてです。それを超えて、独自のロガーメソッドを作成するか、完全にカスタムのオブジェクトを使用する必要があります。

+0

getterはコンソールで動作するようですが、私は 'Object {x:(...)、y:(...)}'を取得し、(...)をクリックすると値が展開されます。これはC#と同じくらい良いものではありません。特に多くの値を表示する必要がある場合は、何も表示されません。ありがとうございました。 –

関連する問題