색상, 이름 등 다양한 속성을 사용하여 각기 다른 레벨 (디버그, 정보, 경고 등)의 사용자 정의 로거를 프로토 타입 화하려고합니다.루프 내에서 일련의 동적 함수를 프로토 타입 할 수 있습니까?
내가하려는 것은 동적으로 모두 빌드하는 것입니다. 그 레벨을 모든 속성을 저장하는 해시 맵에서 가져옵니다. 예를 들어 logger.debug('test')
, logger.info('text)
등과 같은 사용자 지정 로거 개체가 있습니다. 당신은 아이디어를 얻습니다.
하지만,이 특정 코드에 문제가있어 : 항상 마지막 로거 (ERROR)을 가리로
var MyLogger = function(opts) {
this.level = opts.level || 0
this.loggers = {}
var self = this
for (l in LEVELS) {
this.addLogger(l, new loggerOutput(LEVELS[l]))
this[l] = function(message) {
self.getLogger(l).output(message)
}
}
}
문제는 self.getLogger (L) 함께. 내가 정적 문자열 변수를 교체하는 경우, 작동 : self.getLogger ('정보')
해결 방법은 손으로 모든 로거 프로토 타입이며, obviosly이 작동하지만, 나는 더 나은을 찾기 위해 기다리고 있었다 솔루션 :
MyLogger.prototype = {
debug: function(message) {
this.getLogger('debug').output(message)
},
info: function(message) {
this.getLogger('info').output(message)
}
...
}
감사합니다.
당신은 루프의 폐쇄를 가지고 : http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – ajm