以字符串格式执行函数

时间:2017-02-27 18:09:02

标签: javascript node.js

我在os模块中有一个数组函数,我如何循环并执行每个函数。

var os = require("os");

var os_func_list = Object.keys(os);

os_func_list.forEach(function(element) {

    // I know this is not working
    // var func = "os." + element + "()";
    // console.log(func);
}, this);

答案:

os_func_list.forEach(function(element) {
    var func = os[element];
    if (typeof func === 'function') { //verify that value is a function
        console.log(func());
    }
}, this);

2 个答案:

答案 0 :(得分:2)

您可以使用[]表示法动态访问对象的属性/函数:

var os = require("os");

var os_func_list = Object.keys(os);

os_func_list.forEach(function(element) {
  var osValue = os[element];
  if (typeof osValue === 'function') { //verify that value is a function
    osValue();
  }
});

如果您在调用期间需要使用特定的this值(因为我注意到您将this作为第二个参数传递给forEach),您可以使用{{ 1}}。只需改变:

call

osValue();

答案 1 :(得分:-1)

一个非常危险的解决方案可能是使用eval()函数:

var functionName = 'foo' 
eval(functionName + '()') 

我知道在网页上下文中,你可以使用window[functionName]()但是因为你正在执行一个节点脚本,我不确定这个对象是否可用。