2016-12-17 2 views
0

나는 console.log 함수를 사용하여 내 로그에 정보를 추가하고 로그 할 정보가 객체인지 여부를 확인합니다. 정렬의 로그 항목을 피하기 위해 이렇게합니다.괄호 뒤에 새 줄을 추가하십시오.

2016-12-17 (22:12:51) > [object Object] 

코드는 객체가 아닌 인수를 전달할 때 잘 작동합니다. 예를 들어, 명령

console.log("hello","world"); 

인쇄

2016-12-17 (22:23:53) > hello 
2016-12-17 (22:23:53) > world 

하지만 나뿐만 아니라 객체를 전달하면, 코드가 객체 후 새 줄을 삽입 할 수 없게됩니다. 예를 들어, 명령

console.log("hello",{world:true,hello:{amount:1,text:"hello"}},"world"); 

인쇄

2016-12-17 (22:27:32) > hello 
2016-12-17 (22:27:32) > { world: true, hello: { amount: 1, text: hello } } 2016-12-17 (22:27:33) > world 

(객체를 표시 한 후 누락 된 줄 바꿈을 참고).

코드

JQuery와 3.1.1

main.js :

(function (proxied) { 
    function displayArg(argument){ 
     var result= ""; 
     if(typeof argument == "object") { 
      result += "{ "; 
      for (i in argument) { 
       result += i + ": "; 
       result += (displayArg(argument[i])); 
       result += ", " 
      } 
      result = result.substring(0,result.length - 2); 
      result += " }"; 
      return result; 
     } else { 
      return argument; 
     } 
    } 

    console.log = function() { 
     var result = []; 
     for (i in arguments) { 
      var d = new Date(); 
      result[i] = d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate() + 
       " (" + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() + ") > "; 
      result[i] += displayArg(arguments[i]); 
      result[i] += "\n"; 
     } 
     return proxied.apply(this, result); 
    } 
})(console.log); 

답변

0

TL; DR들이 이름을 공유하지 않도록 반복자 변수를 변경하거나 그들이 원하는 범위를 탈출하지 않도록하기 위해 루프의 정의에 "VAR"를 추가.

이 (내 자신의) CONSOLE.LOGdisplayArg에서 루프의는 "공유"반복자 내가의 값이라고 밝혀졌습니다. 반복기 변수를 선언하지 않으면 범위가 내가 필요한 것보다 넓기 때문입니다. 명확히하기 위해,이 예제를 살펴 :

console.log({isThis:"real life"},"hello","world") 

CONSOLE.LOG에서 코드 [0] 다음 전화 결과의 시작 부분에 날짜를 추가합니다 displayArg (인수 [0]), arguments [0]{isThis : "real life"}입니다. 이 함수는 객체 속성을 반복 할 것이므로 에 인 값이 할당됩니다.이입니다. 함수가 반환 된 후 i 값은 으로 돌아 가지 않습니다.대신, 내가isThis 될 것이며 그 결과,

result[isThis] += "\n" 

대신

result[0] += "\n" 

result[i] += "\n"; 

가 변환하는 라인으로 아마도 가장 합리적인 솔루션을 추가했다 a var에서 iterators를 선언하십시오. 다음 코드는 예상대로 작동합니다.

0

내가 객관적 이해 완전히 모르겠지만 무엇의 라인을 따라 뭔가에 대한 과도하게 오버라이드 된 오버라이드 :

var oldLog = console.log; 

console.log= function(){ 
    var d= new Date(), 
     dateString = // process string 

    ..... 
    for(var i = 0; i<arguments.length; i++){ 
     oldLog(dateString, arguments[i]);   
    } 

} 
+0

이전 정의를 인수별로 개별적으로 호출 할 가능성을 분석 했으므로 새 줄을 처리 할 필요가 없습니다. 사실, 하나의 호출 만하는 대신 인수 (결과 [i]) 당 함수를 호출하는 것이 너무 어렵지 않습니다. 그러나 코드는 console.log에서 반환 한 정보를 사용하며 사용자가 한 번만 호출했을 때 내부적으로 여러 번 호출하면 솔루션보다 복잡해질 수 있습니다. – Emilio

관련 문제