通过node.js上的(string)名称调用函数

在客户端,你可以通过window["functionName"](arguments); 。 如何在node.js服务器端代码中实现?

你正在寻找global

但是请注意,在模块中没有任何东西暴露在这个层面上

如果你需要在一个模块中使用这样的function,那么就需要将这些模块函数存储在模块中的variables中,然后通过从模块对象属性中访问它们来调用它们。 例:

 var x = { }; // better would be to have module create an object x.f1 = function() { console.log('Call me as a string!'); } 

现在,在模块中,可以使用string中的值来调用它:

 var funcstr = "f1"; x[funcstr](); 

我正在用Node自己学习,上面可能是各种各样的错误:-)。 编写这个例子的一个稍微好点的方法可能是(对于模块m.js):

 module.exports = { f1: function() { console.log("Call me from a string!"); }, f2: function(str1) { this[str1](); } } 

现在你可以:

 var m = require('m.js'); m.f2('f1'); 

甚至只是:

 var m = require('m.js'); m['f1'](); 

FWIW!

如果你需要它在模块范围内,你可以使用这样的东西

 var module = require('moduleName'); module['functionName'](arguments); 

这不是特定于窗口对象的。 在JavaScript中,可以通过这种方式访问​​对象的任何属性。 例如,

 var test = { prop1 : true }; console.log(test.prop1); // true console.log(test["prop1"]); // also true 

阅读更多信息: https : //developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects

我使用这个节点,看看这个方法是否适合你

 var _ = require('lodash'); var fnA1 = require('functions/fnA1'); var fnA2 = require('functions/fnA2'); module.exports = { run: function(fnName, options, callback) { 'use strict'; var nameSpace = fnName.toString().split('.'); // if function name contains namespace, resolve that first before calling if (nameSpace.length > 1) { var resolvedFnName = this; _.forEach(nameSpace, function(name){ resolvedFnName = resolvedFnName[name]; }); resolvedFnName(options, callback); } else { this[fnName](options, callback); } }, fnA1: fnA1, fnA2: fnA2 }; 

这样称呼

 importVariable.run('fnA1.subfunction', data, function(err, result){ if (err) {return callback(err);} return callback(null, result); });