2015-07-18 8 views
2

Я использовал метод, описанный here в Stack Overflow, чтобы перехватить журнал консоли, но я не могу получить объект, посланный вместе с текстом. Рассмотрим следующий код:захват объектов javascript отправлен lo 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);

Если вы хотите иметь только один предупреждение, которое отображает все объекты, то вы можете объединить свои представления строки в цикл и вызвать 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

Отлично, теперь каждый консольный вызов заменяется не один, а * п * блокирующие вызовы функций! :) * (Решение, конечно, правильно, технически, но иногда спрашивает * почему * так же важно) * – 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); 

    }; 
})(); 

 Смежные вопросы

  • Нет связанных вопросов^_^