我正在使用以下代码重写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'});