Javascript:动态声明函数的正确方法

标签 javascript node.js

我无法理解动态声明函数。我试图问这个问题,所以它更通用,但我真的不知道在这种情况下我在做什么,并不断回到我的代码。

我有一个 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/

相关文章:

javascript - 如何从另一个组件触发 useEffect

javascript - 复选框点击事件

html - 如何将html表单数据发送到nodejs

javascript - 使用 Google 方向 API 问题绘制具有 8 个以上航路点的路线图

javascript - 如何将 javascript 从父级加载到子级上下文中

javascript - 为什么应用 JSON.stringify 会占用这么多内存?

node.js - 从表中选择全部但忽略最后 N 条记录

node.js - 如何测试包含异步函数的函数?

javascript - 动态单选按钮表单 react

javascript - NodeJs : Is there a way to figure out what modules are not being used by my program?