2016-04-27 3 views
0

コンストラクタからオブジェクトを作成するときに、結果オブジェクト がconsole.logを使用するときに表示するプロパティが多すぎることがあります。 表示するプロパティを指定するにはどうすればよいですか?例えばconsole.logをオブジェクトにするときに表示するプロパティを指定する方法は?

私はこのようなコンストラクタを持っている場合:

function Obj(source) { 
    this.lines = source.split('\n'); // it can be 1000 lines or even more 
} 

だから、私が行う場合:

VAR OBJ =新しいObjに(ソース)。 console.log(obj);

すべての行がコンソールに出力されます。私はその プロパティをconsole.logに除外したいですか?

+1

_ "1000行以上でもかまいません" _。あなたは '分割された 'データについて話していますか?またはObjのプロパティ? – Rayon

+0

'console.log(obj.lines)'や 'console.log(obj.some_property)'を実行することで、印刷するプロパティを指定することができます。 – AdamJeffers

+0

@Rayon私はその行をプロパティとして持つオブジェクトインスタンス出力をいっぱいにします –

答えて

1

関数は、オブジェクトをコピーし、それからlines性を除去し、得られたオブジェクトを記録できました。あなたのオブジェクトに独自のinspectメソッドを提供することによって、それをカスタマイズすることができます。
プロパティをノードコンソールに表示しないようにするもう1つの簡単な方法は、コードを壊さない限り、列挙できないようにすることです。

ブラウザでは、ログに記録されたオブジェクトのインタラクティブな検査では、リクエストに応じて拡張されるため、通常は大きすぎるオブジェクトには問題がありません。印刷するものを正確に制御したい場合は、唯一の方法は文字列をconsole.logに渡すことです。

0

デフォルトでは、すべてのプロパティが印刷されます。印刷するプロパティを指定しない限り、すべてのプロパティが表示されます。

あなたは、あなたがconsole.log(Obj)をすれば今では唯一のラインが表示されますラインビュー

function Obj(source) { 
    this.source = source; 
    this.lines = function(){ 
    return this.source.split('\n'); 
    } 
} 

でラインを与える関数としての特性を定義するすべての行をしたくない場合。

+0

もちろん、これは根本的にオブジェクトを変更しますが、これは疑問があるオプションです。 –

0

console.logの表示内容を制限することはできません。コンソールの実装(コンソールを表示しているかどうかによって同じ実装内であっても、 logが呼び出されたときではありません)。

console.dirは、console.logよりもこの場合に便利です。 MDN

指定されたJavaScriptオブジェクトのプロパティの対話型リストを表示します。出力は、子オブジェクトの内容を表示できる公開三角形を含む階層リストとして表示されます。

もちろん、これは対話型コンソールディスプレイ(ブラウザなど)を使用している場合にのみ便利です。

代わりに、あなたがやりたいconsole.log(String(obj));を使用し、デフォルトtoStringをオーバーライドすることができます:console.logを呼び出すとき

Obj.prototype.toString = function() { 
    // generate your designer output here 
    return desiredOutputString; 
}; 

コンソールの実装によっては、いくつかのケースでは、あなたはString(...)一部を必要としないかもしれませんが、ほとんどの場合、あなたはそうするでしょう。

0

オブジェクトを好きなように印刷するメソッドを追加します。例えば。それはちょうどあなたが定義することができ財産を省略して、すぐにconsole.logコマンドで関数を呼び出したいのロギングになら

Obj.prototype.debug = function() { 
    console.log({ 
    x: this.x, 
    y: this.y 
    }); 
}; 
0

console.logが印刷用フォーマットオブジェクトにutil.inspectを使用し、nodejsに

function Obj(source) { 
    this.lines = source.split('\n'); // it can be 1000 lines or even more 
} 
var obj = new Obj(source); 
console.log((function(){var copy = Object.assign({}, obj); delete copy.lines; return copy;})()) 
関連する問題