私はログに情報を追加するためにconsole.log関数をプロキシしています。また、ログに記録されている情報がオブジェクトであるかどうかを調べています。これは、並べ替えのログエントリを取得しないようにするためです。ブラケットの後ろに新しい行を追加する
2016-12-17 (22:12:51) > [object Object]
コードは、オブジェクトではない引数を渡すときに問題なく動作します。例えば、コマンド
console.log("hello","world");
プリント
2016-12-17 (22:23:53) > hello
2016-12-17 (22:23:53) > world
しかし、私は同様にオブジェクトを渡す場合、コードは、オブジェクトの後に新しい行を挿入するために失敗します。たとえば、コマンドが
console.log("hello",{world:true,hello:{amount:1,text:"hello"}},"world");
プリント
2016-12-17 (22:27:32) > hello
2016-12-17 (22:27:32) > { world: true, hello: { amount: 1, text: hello } } 2016-12-17 (22:27:33) > world
(オブジェクトを表示した後、行方不明の改行を注意してください)。
コード
のjQuery 3.1.1
main.js:
(function (proxied) {
function displayArg(argument){
var result= "";
if(typeof argument == "object") {
result += "{ ";
for (i in argument) {
result += i + ": ";
result += (displayArg(argument[i]));
result += ", "
}
result = result.substring(0,result.length - 2);
result += " }";
return result;
} else {
return argument;
}
}
console.log = function() {
var result = [];
for (i in arguments) {
var d = new Date();
result[i] = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() +
" (" + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + ") > ";
result[i] += displayArg(arguments[i]);
result[i] += "\n";
}
return proxied.apply(this, result);
}
})(console.log);
引数ごとに前の定義を呼び出す可能性を分析しました。それは新しい行の処理を節約します。実際には、1回の呼び出しではなく、引数(result [i])ごとに関数を呼び出すことは、自分のコードから難しいことではありません。しかし、コードではconsole.logから返された情報が使用され、ユーザーが一度だけ呼び出すと内部的に数回呼び出すと、ソリューションよりも複雑になる可能性があります。 – Emilio