我已经在Stack Overflow中使用了描述here的方法拦截控制台日志,但我无法将文本与文本一起发送。请考虑以下代码:
var obj={result:true,type:"text"};
(function(){
var oldLog = console.log;
console.log = function (message) {
alert(message); // message does not return the object
oldLog.apply(console, arguments);
};
})();
console.log("hi",obj);
我需要在message
代码行中代替alert
来获取obj
对象?
答案 0 :(得分:2)
您正在将多个参数传递到自定义console.log
函数中,但您只在第一个参数上调用alert
。要解决此问题,请迭代自定义console.log
函数的参数,并在每个参数上调用alert:
var obj={result:true,type:"text"};
(function(){
var oldLog = console.log;
console.log = function () {
for (var i = 0; i < arguments.length; i++) {
alert(arguments[i]);
}
oldLog.apply(console, arguments);
};
})();
console.log("hi",obj);
如果您只想有一个显示所有对象的警报,那么您可以在for循环中连接它们的字符串表示,并在结尾只调用alert
一次:
var obj={result:true,type:"text"};
(function(){
var oldLog = console.log;
console.log = function () {
var result = "";
for (var i = 0; i < arguments.length; i++) {
result += arguments[i] + " ";
}
alert(result);
oldLog.apply(console, arguments);
};
})();
console.log("hi",obj);
最后,如果你想在警报中看到对象的内容,你可以在每个参数被处理之前调用JSON.stringify()
。
答案 1 :(得分:2)
你可以试试这个
var obj={result:true,type:"text"};
(function(){
var oldLog = console.log;
console.log = function () {
alert(JSON.stringify(arguments));
oldLog.apply(console, arguments);
};
})();