IT story

프록시 함수를 통해 console.log에 첫 번째 클래스 인수로 인수 전달

hot-time 2021. 1. 7. 20:00
반응형

프록시 함수를 통해 console.log에 첫 번째 클래스 인수로 인수 전달


console.log 지정되지 않은 수의 인수를 취하고 해당 내용을 한 줄에 덤프합니다.

console.log그 동작을 유지하기 위해 직접 전달 된 인수를 전달하는 함수를 작성할 수있는 방법이 있습니까? 예를 들면 :

function log(){
    if(console){
        /* code here */
    }
}

이것은 다음과 같지 않습니다.

function log(){
    if(console){
        console.log(arguments);
    }
}

arguments는 배열 이므로 console.log해당 배열의 내용을 덤프합니다. 또한 다음과 동일하지 않습니다.

function log(){
    if(console){
        for(i=0;i<arguments.length;console.log(arguments[i]),i++);
    }
}

모든 것을 다른 줄로 인쇄하기 때문입니다. 요점은 console.log의 동작 을 유지 하는 것이지만 프록시 기능을 통해서 log입니다.

+ ---

앞으로 모든 함수에 적용 할 수있는 솔루션을 찾고있었습니다 (인수 처리를 그대로 유지하는 함수에 대한 프록시 만들기). 그러나 그렇게 할 수 없다면 console.log구체적인 답변을 수락하겠습니다 .


이렇게해야 ..

function log() {
    if(typeof(console) !== 'undefined') {
        console.log.apply(console, arguments);
    }
}

(그냥 다른 옵션 추가 사용 확산 연산자와 나머지 - 비록 매개 변수를 arguments확산와 직접 사용될 수 )

function log(...args) {
    if(typeof(console) !== 'undefined') {
        console.log(...args);
    }
}

유사한 방식으로 console.log를 래핑하는 html5boilerplate 코드에서이를 인식하지 못하는 브라우저를 방해하지 않도록하는 좋은 예가 있습니다. 또한 히스토리를 추가하고 console.log 구현의 차이점을 부드럽게합니다.

그것은 Paul Irish에 의해 개발되었고 그는 여기 에 그것에 포스트를 썼습니다 .

아래에 관련 코드를 붙여 넣었습니다. 여기에 프로젝트의 파일 링크가 있습니다. https://github.com/h5bp/html5-boilerplate/blob/master/js/plugins.js

// usage: log('inside coolFunc', this, arguments);
// paulirish.com/2009/log-a-lightweight-wrapper-for-consolelog/
window.log = function(){
  log.history = log.history || [];   // store logs to an array for reference
  log.history.push(arguments);
  if(this.console) {
    arguments.callee = arguments.callee.caller;
    var newarr = [].slice.call(arguments);
    (typeof console.log === 'object' ? log.apply.call(console.log, console, newarr) : console.log.apply(console, newarr));
  }
};

// make it safe to use console.log always
(function(b){function c(){}for(var d="assert,count,debug,dir,dirxml,error,exception,group,groupCollapsed,groupEnd,info,log,timeStamp,profile,profileEnd,time,timeEnd,trace,warn".split(","),a;a=d.pop();){b[a]=b[a]||c}}((function(){try {console.log();return window.console;}catch(err){return window.console={};}})());

예.

console.log.apply(null,arguments);

Although, you may need to loop through the arguments object and create a regular array from it, but apart from that that's how you do it.

ReferenceURL : https://stackoverflow.com/questions/7942323/pass-arguments-to-console-log-as-first-class-arguments-via-proxy-function

반응형