捕获发送到lo console.log的javascript对象

时间:2015-07-18 21:47:45

标签: javascript object console.log

我已经在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对象?

2 个答案:

答案 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);

    };
})();