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)输出字符串和一个可扩展对象,您可以检查其属性。如何更改我的 conlog 函数来执行此操作?我试过注销所有这样的参数:

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

哪里message是“调试”之类的东西,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 回答