2015-07-18 67 views
2

我已經使用Stack Overflow的here方法攔截控制檯日誌,但我無法得到與文本一起發送的對象。請看下面的代碼:捕獲javascript對象發送洛杉磯console.log

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

您正將多個參數傳遞給您的自定義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()

+0

大,現在每控制檯呼叫被替換不是一個,而是* N *阻塞函數調用! :)(從技術上講,解決方案當然是正確的,但有時會問*爲什麼*同樣重要)* – doldt

+0

@doldt編輯我的答案,添加一個版本,可以爲所有對象提醒一次。也許這更接近你正在尋找的東西! –

2

你可以試試這個

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

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

      alert(JSON.stringify(arguments)); 

     oldLog.apply(console, arguments); 

    }; 
})();