21

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)付けることができるため、文字列に加えて、プロパティを検査できる展開可能なオブジェクトが出力されます。これを行うためにコンログ関数を変更するにはどうすればよいですか? 次のようにすべての引数をログアウトしようとしました:

metro.conlog = (function () {
    return function (message) {
        if ((metro.siteData.debug || metro.hashOptions.hasOwnProperty('debug')) && window.console && message) {
            console.log(arguments);
        }
    };
}());

しかし、これはconsole.logで得られるきちんとした行ではなく、引数を配列として出力します。このスクリーンショットで違いを確認できます。

ここに画像の説明を入力

元のログ出力を再現する方法を誰か教えてもらえますか?

4

2 に答える 2

37

もちろん、それを行うことができます。これは、追加のオプションを追加して、必要なことを正確に行う方法のデモです。

コードは以下のとおりです。

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);
于 2014-09-16T11:16:52.080 に答える
1

このようなことを試してください

/* 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);
        }
    };
}());

wheremessageは「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 で動作することをテストして確認しました。

于 2013-09-11T16:32:36.247 に答える