我无法理解动态声明函数。我试图问这个问题,所以它更通用,但我真的不知道在这种情况下我在做什么,并不断回到我的代码。
我有一个 json 对象,其中包含日志级别(如下面的代码所示),对于每个日志级别,我需要创建一个函数,以便我可以调用,例如: log.info('my log message');
我遇到的问题是,当我调用 log.info() 时,我无法弄清楚调用了“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');
最佳答案
Object.keys(levels).forEach(function (severity) {
this[severity] = function (message) {
console.log(severity, message);
});
}, this);
关于Javascript:动态声明函数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9400423/