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

capturing javascript objects sent lo 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);

我要在 alert 代码行中写什么来代替 message 以获得 obj 对象?

您将多个参数传递给您的自定义 console.log 函数,但您仅在第一个参数上调用 alert。要解决此问题,请遍历自定义 console.log 函数的参数,并对每个参数调用警报:

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()

你可以试试这个

var obj={result:true,type:"text"};

(function(){
    var oldLog = console.log;
    console.log = function () {

            alert(JSON.stringify(arguments));

        oldLog.apply(console, arguments);

    };
})();