我需要在我的Node.js程序中实现以下功能。
建议我一个更好的方法来实现这个或已经实现了这个的代码片段。
答案 0 :(得分:1)
var functions = ["foo", "bar", "baz"];
我们遍历函数列表并调用__call
函数。
functions.forEach(function(f){
__call(f);
});
此步骤取决于框架。如果您正在使用节点,则必须使用global
对象。如果您使用的是浏览器(HTML),则必须使用window
对象。
对于前者,请使用:
__call = function(f) {
var args = [];
for(var i = 1; i<arguments.length; i++){
args.push(arguments[i])
};
console.log(args);
global[f].apply(null, args);
};
对于后者,请使用:
__call = function(f) {
var args = [];
for(var i = 1; i<arguments.length; i++){
args.push(arguments[i])
};
console.log(args);
window[f].apply(null, args);
};
唯一的区别是我们使用window
或global
词典来访问该功能。
编辑:添加了传递参数。
答案 1 :(得分:1)
你可以这样做;
function foo(v){console.log("foo: ",v)};
function bar(v){console.log("bar: ",v)};
var funs = ["foo", "bar"],
i = 0;
while (i < funs.length) this[funs[i]](i++);
当然,您的函数定义可能位于特定范围内,您可能需要从内部调用它们。在这种情况下,您当然可以将上面的代码包装在一个函数中,并将其绑定到您的函数定义所在的任何范围。例如
var obj = {
foo: function(v){console.log("foo: ",v)},
bar: function(v){console.log("bar: ",v)}
},
funs = ["foo", "bar"],
runner = function(a){
var i = 0;
while (i < a.length) this[a[i]](i++);
}.bind(obj);
runner(funs);
答案 2 :(得分:0)
您可以通过以下名称调用函数:
const functions = [&#39; index&#39;,&#39; push&#39; ...];
functions[0]() // write your parameters inside. this will call 'index'
如果这些功能不是异步,只需一个接一个地写入调用。如果它们是异步的,请使用async.waterfall或async.series等帮助程序。
见1.