在Javascript中将函数推送到数组中

时间:2014-06-18 19:03:07

标签: javascript arrays

有没有办法将函数列表推送到关联数组?这就是我想要做的事情:

var inits = {
    "first"  : fn1(),
    "second" : fn2(),
    "third"  : fn3(),
    "fourth" : fn4()

};

var functions = ['first','fourth'];

for(var index in functions ) {

    inits[functions[index]];

}

这里的重要部分是能够命名每个函数并根据给定的函数名称数组调用它。我可以在PHP中执行此操作,但无法弄清楚如何在javascript中执行此操作。

2 个答案:

答案 0 :(得分:2)

首先,您实际上并未存储功能。您正在存储函数的 return 值。

要存储该功能,请使用

var inits = {
  'first': fn1,
  'second': fn2,
   ...
};

其次,你在数组上错误地迭代。

使用forEach

functions = ['first', 'fourth'];

functions.forEach(function (fn) {
    inits[fn];
});

第三,在你的循环中,你实际上并没有尝试调用该函数。如果这是您的意图,那么您错过了()

functions.forEach(function (fn) {
    inits[fn]();
});

答案 1 :(得分:1)

只需进行一些小改动即可:

var inits = {
    "first"  : function() { /* make sure there's a function body */ },

    "second" : fn2,   // or this, if you intend to call a function named `fn2`
                      // or assigned to a locally accessible fn2 variable.

    "third"  : fn3(), // or this, if fn3() returns a function ...
    "fourth" : fn4(), // but, this version *probably* isn't what you want.

};

var functions = ['first','fourth'];

// generally speaking, don't use for-in on an array.
for(var i = 0; i < functions.length; i++) {

    // use parentheses to invoke the function
    inits[functions[i]]();

}