我正在使用以下代码重写console.log函数,因为我只想在console.log返回showConsole时打印true

var proxyConsolelog = window.console.log;


console.log=function(msg){
    try{
        if(Boolean(showConsole))
        {
            proxyConsolelog(msg);
        }
    }catch(e){
        alert(JSON.stringify(e.message));
        proxyConsolelog('ERROR-->>'+e.message);
    }
}
proxyConsolelog行创建了一个问题,而alert(JSON.stringify(e.message));给我一个“类型错误”。

我得到这个:



在日志中。

我该如何实现?

最佳答案

您遇到的问题是,调用函数时的接收器(this)不是控制台。

你可以这样做 :

var proxyConsolelog = window.console.log.bind(window.console);

如果您需要与IE8兼容(不带有bind),则可以这样做:
var logFun = window.console.log;
var proxyConsolelog = function(){
     logFun.apply(window.console, arguments)
};

在标记问题jquery时,您也可以使用proxy:
var proxyConsolelog = $.proxy(window.console.log, window.console);

一旦有了新功能,就可以像console.log一样调用它:
proxyConsolelog('some', {arg:'uments'});

09-25 16:48