私はconsole.logを条件でラップするユーティリティ関数を持っているので、開発環境にいてconsole.logが存在する場合にのみconsole.logを呼び出します。
_/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
return function (message) {
if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
console.log(message);
}
};
}());
_
これは通常のコンソールログでは非常にうまく機能しています。しかし、最近、console.logに複数の引数を渡すことの喜びを発見しました。これにより、コンソールログの先頭に文字列を付けることができるため、console.log('DEBUG', object)
は、文字列に加えて、プロパティを拡張できるオブジェクトを出力します検査。これを行うようにconlog関数を変更するにはどうすればよいですか?私はこのようなすべての引数をログアウトしようとしました:
_metro.conlog = (function () {
return function (message) {
if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
console.log(arguments);
}
};
}());
_
しかし、これは、console.logで得られるきちんとした行ではなく配列として引数を出力します。このスクリーンショットで違いを確認できます。
元のログ出力を再現する方法を誰かに教えてもらえますか?
もちろん、それを行うことができます this は、追加オプションを追加して、必要なことを正確に行う方法のデモです。
そしてコードは以下の通りです:
var mylog = (function () {
return {
log: function() {
var args = Array.prototype.slice.call(arguments);
console.log.apply(console, args);
},
warn: function() {
var args = Array.prototype.slice.call(arguments);
console.warn.apply(console, args);
},
error: function() {
var args = Array.prototype.slice.call(arguments);
console.error.apply(console, args);
}
}
}());
var name = "Alex";
var arr = [1, 2, 3];
var obj = { a:1, b:2, c:3 };
var hello = function(msg){alert(msg);};
mylog.log("Name: ", name);
mylog.log("Window Debug: ", window);
mylog.error("Some error happened");
mylog.warn("Ahh... Warning", arr, obj);
mylog.log("more parameters: ", arr, obj, hello);
このようなものを試してください
/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
return function (message, object) {
if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
console.log(message, object);
}
};
}());
ここで、message
は「DEBUG」のようなものであり、object
は調査するオブジェクトです。
console.log
に任意の数の引数を渡せるようにしたい場合は、arguments
変数を使用することをお勧めします。
/* Console log if environment has debug true or #debug initially passed in URL */
metro.conlog = (function () {
return function (message, object) {
if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
console.log(arguments);
}
};
}());
私のコメントで述べたように、これを完全にサポートしているブラウザーはわかりません(私はIEを調べています)。
現在のChrome、FireFox、Safariで動作することをテストして確認しました。