2015-07-18 2 views
2

J'ai utilisé la méthode décrite here à Stack Overflow pour intercepter le journal de la console, mais je n'arrive pas à obtenir l'objet ainsi envoyé avec un texte. Considérez le code suivant:capture d'objets javascript envoyés à 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); 

Que dois-je écrire à la place de message dans la ligne de code alert pour obtenir l'objet obj?

Répondre

2

Vous passez plusieurs arguments dans votre fonction console.log personnalisée, mais vous n'appelez que alert sur le premier argument. Pour résoudre ce problème, itérer sur les arguments de votre fonction personnalisée console.log et appeler alerte sur chacun des arguments:

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

Si vous voulez avoir une seule alerte qui affiche tous les objets, alors vous pouvez concaténer leurs représentations de chaîne dans la boucle et appeler alert une seule fois à la fin:

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);
Enfin, si vous voulez voir le contenu de l'objet dans votre alerte, vous pouvez appeler JSON.stringify() sur chaque argument avant qu'il ne soit traité.

+0

Grand, maintenant chaque appel de la console est remplacé par pas, mais * n * appels de fonction de blocage! :) * (La solution est bien sûr correcte, techniquement, mais parfois demander * pourquoi * est tout aussi important) * – doldt

+0

@doldt J'ai édité ma réponse pour ajouter une version qui alerte une fois pour tous les objets. Peut-être que c'est plus proche de ce que vous cherchiez! –

2

vous pouvez essayer cette

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

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

      alert(JSON.stringify(arguments)); 

     oldLog.apply(console, arguments); 

    }; 
})();