如何在javascript中扩展控制台功能?

如何在javascript中扩展控制台功能?,javascript,jquery,Javascript,Jquery,当前,当我们编写console.log时,它会打印msg。我们可以扩展控制台功能吗?我们可以用msg打印当前时间。我试过这样做 (function () { var old_console =console; var newConsole = newconsole; function newconsole() { var d =new Date(); old_console.apply(this,argument

当前,当我们编写
console.log时,它会打印
msg
。我们可以
扩展
控制台功能吗?我们可以用
msg
打印
当前时间
。我试过这样做

(function () {
        var old_console =console;
        var newConsole = newconsole;
        function newconsole() {
         var d =new Date();
         old_console.apply(this,arguments);
         return d.getMilliseconds();
        }
    })(); 

但它不起作用。我们如何打印?

创建自己的日志记录方法而不是控制台,并使用它在console.log中输出任何格式。 如果您想知道控制台中发生的所有事情的时间戳,那么只需从控制台设置中启用时间戳 看

我刚刚在jsfiddle中启用了这个选项并得到了这个结果

当我将鼠标悬停在它上面时,它还会显示日期和时间。 您可以简单地看到它与

/*启用控制台设置以显示时间戳并运行此代码*/

console.log('abc')这在Chrome inspector中起作用:

console.log = function(msg) {
  var d = new Date();
  return d.getMilliseconds() + ' ' + msg;
}

console.log('Hi');

只需为console.log创建一个包装器,其中还包括一个调用
new Date()
,该调用负责打印当前日期以及所需的日志消息。

您想要增强
console.log
,所以只需处理该方法,而不是整个
console
对象

(function (console) {
    var old_log = console.log;
    console.log = function() {
        var d = new Date();
        old_log.apply(console, [d].concat(arguments));
        return d.getMilliseconds();
    }
})(window.console); 
如果需要,可以对
console.error()
console.info()
console.log()
console.warn()
等执行相同的操作。以下是一种有效的方法:

(function (console, methods) {
    var old = {};
    methods.forEach(function(method) {
        if(console[method]) {
            old[method] = console[method];
            console[method] = function() {
                var d = new Date();
                old[method].apply(console, [d].concat(arguments));  
                return d.getMilliseconds();
            }
        }
    });
})(window.console, ['error', 'info', 'log', 'warn']); 

经过适当的考虑,您可能也可以这样做。

什么不起作用?关于
console.log(new Date()+“and message”)
?@Denny我只举一个例子,说明我将如何发送它发出的mesgdate@Halcyon换句话说,当我键入
console.log('abc')时.it打印
abc`当前时间可能重复您正在覆盖函数..未扩展..:(您现在只能传递可串参数。这是严重的功能退化。这是最好的示例不-这是最好的示例:使用此示例,我尝试过请共享fiddle这是您的fiddle mate。我刚刚打开控制台并在控制台视图中启用时间戳。请尝试。请参阅我只是在所有控制台中附加
ddd
,但在t运行时不工作。)他的代码可以回答这个问题,提供关于如何和/或为什么解决问题的额外上下文,从而提高答案的长期价值。
(function (console, methods) {
    var old = {};
    methods.forEach(function(method) {
        if(console[method]) {
            old[method] = console[method];
            console[method] = function() {
                var d = new Date();
                old[method].apply(console, [d].concat(arguments));  
                return d.getMilliseconds();
            }
        }
    });
})(window.console, ['error', 'info', 'log', 'warn']);