2012-02-22 2 views
2

동적으로 함수를 선언하는 데 어려움을 겪고 있습니다. 이 질문에 답하기 위해 좀 더 일반적인 질문을 시도했지만이 경우 실제로 무엇을하는지 모르고 내 코드로 돌아 왔습니다.Javascript : 함수를 동적으로 선언하는 올바른 방법

로그 수준 (아래 코드에서 볼 수 있습니다)이 포함 된 json 개체가 있고 각 로그 수준에 대해 호출 할 수 있도록 함수를 만들어야합니다 (예 : log.info ('my log message');

내가 겪고있는 문제는 log.info()를 호출 할 때 발생합니다. log.error()가 호출 될 수있는 모든 이유로 '정보'가 호출 될 수 없다는 것을 알 수 없습니다. 동일한 동적 코드와 나는 이것을 호출하는 함수를 탐지하는 방법을 모른다.

나는 그것이 의미가 있기를 바랍니다. 나는 지금까지 내 코드가 아래에 있으므로 Node.js에 이것을 쓰고있다. 내 문제 기능이 어디에 있는지, 그리고 로그 수준을 표시 할 위치를 말한 의견이 있습니다.

exports.logger = function() { 

    // Syslog severity levels 
    var levels = { 
    emerg: { "code": 0 }, 
    alert: { "code": 1 }, 
    crit: { "code": 2 }, 
    error: { "code": 3 }, 
    warning: { "code": 4 }, 
    notice: { "code": 5 }, 
    info: { "code": 6 }, 
    debug: { "code": 7 } 
    }; 

    // Loop through each severity level 
    for (var severity in levels) { 
    // Ensure we're not iterating over a prototype 
    if (levels.hasOwnProperty(severity)) { 
     // Declare function 
     this[severity] = function(message) { 
     // Here's the problem: I have no idea what called this function. 
     console.log('Log severity level here:', message); 
     };  
    } 
    } 
} 

이 내가 그것을 호출하는 방법입니다

var logger = require('log.js'); 
var log = new (logger.logger)(
    // settings removed for example 
); 
log.info('test'); 

답변

4
Object.keys(levels).forEach(function (severity) { 
    this[severity] = function (message) { 
    console.log(severity, message); 
    }); 
}, this); 
내 정신을 저장하는 너무 많은
+0

덕분에 시간이에 붙어 있었다 :) –

관련 문제