代码之家  ›  专栏  ›  技术社区  ›  tic

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

  •  2
  • tic  · 技术社区  · 9 年前

    我已经使用了描述的方法 here 在Stack Overflow拦截控制台日志,但我无法将对象与文本一起发送。考虑以下代码:

    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 回复  |  直到 6 年前
        1
  •  2
  •   Maximillian Laumeister    9 年前

    您正在将多个参数传递到自定义 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循环中连接它们的字符串表示形式并调用 警觉的 仅在结尾处一次:

    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() 在每个参数被处理之前。

        2
  •  2
  •   m4n0    9 年前

    你可以试试这个

    var obj={result:true,type:"text"};
    
    (function(){
        var oldLog = console.log;
        console.log = function () {
    
                alert(JSON.stringify(arguments));
    
            oldLog.apply(console, arguments);
    
        };
    })();