는 다시 콘솔 로거를 캡슐화하고 대신 내가 취하는 함수를 만들어 콘솔을 캡슐화하기 위해 전체 개체 함께 올라오고 생각 콘솔 메소드. 그런 다음 디버깅이 켜져 있는지 확인하고 함수를 호출합니다.
var debug = true;
var log = function (logFunction) {
if (debug) {
logFunction.apply(console, Array.prototype.slice.call(arguments, 1));
}
};
var check = function (canvas) {
log(console.groupCollapsed, "Initializing WebGL for Canvas: %O", canvas);
log(console.log, "cool");
log(console.groupEnd);
};
check(document.getElementById('thing'));
@ Esthete의 생각은 좋아하지만 아직 캡슐화 된 콘솔을 만들고 싶지 않습니다. 다음은 예제 jsfiddle입니다. http://jsfiddle.net/WRe29/
여기서 객체 프로토 타입에 debugCall
을 추가합니다. 로그 기능과 똑같은 다른 이름이므로 '중복'이 없습니다. 이제 어떤 객체도 debugCall
을 호출하고 debug
플래그를 확인할 수 있습니다.
Object.prototype.debugCall = function(logFunction)
{
if (this.debug) { logFunction.apply(console, Array.prototype.slice.call(arguments, 1)); }
};
var Thing = { debug : true /*, other properties*/ };
Thing.debugCall(console.log, "hello world");
편집 :
내 초기 생각은 개체가 로그인해야하는지 여부를 나타 내기 위해 '설정'으로 객체를 사용했다. 나는 이것을 잠시 동안 사용 했었지만 컨피규레이션 개념은 마음에 들었지만, 모든 사람들이 코드의 구성 객체를 사용하여 객체의 확장 된 함수에 전달되는 기능과 함께 매우 열렬하다고 생각하지는 않았습니다. 따라서 개념을 도입하고 대신 기능 장식을 살펴 보았습니다.
Function.prototype.if = function (exp) {
var exFn = this;
return function() {
if (exp) exFn.apply(this, arguments);
};
};
var debug = false;
console.log = console.log.if(debug);
console.group = console.group.if(debug);
// Console functions...
myFunction = myFunction.if(debug);
표현식을 검사하는 데 장식 기능을 사용하는 것은 거의 필요하지 않지만 if 문을 어디서나 내 코드에 넣으 려하지 않습니다. 희망이 사람이 어쩌면 기능 장식 그들의 관심을 촉발하는 데 도움이되기를 바랍니다.
주 : 또한 설치하지 않는 한 경우 확장 올바르게 모두에 대한 로깅을 죽이 방법 * 기침) 개체/라이브러리 구성의 몇 가지 유형 디버그
다시 게시 할 예정입니까 [이] (http://benalman.com/projects/javascript-debug-console-log/) 보셨나요? – adeneo
@adeneo 나는 크로스 브라우저 호환이 가능하지만 크롬 콘솔 기능 중 일부는 포함하지 않았기 때문에 유망 해 보였다. 내가해야한다면 아마 그걸 연장 할 수있을거야. –
처음에는 콘솔을 사용하지 않고 디버그를 사용하는 것이 다소 혼란 스럽지만 편리하고 모든 로깅을 비활성화하는 쉬운 방법이 있습니다 ->'debug.setLevel (0)'및 기타 많은 멋진 기능. 그냥 log() 함수를 덮어 쓰는 것은 나에게 좋은 생각처럼 들리지 않는다! – adeneo