使用数组中的字符串名称运行函数

时间:2017-10-05 20:37:51

标签: javascript arrays function

我有一个包含一堆函数名的数组。我没有将函数存储在对象中。

for (i = 0; i < view_functions.length; i++) {
    view_functions[i]();
}

这不起作用,有什么想法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

您发布的代码有效,因此定义函数的代码可能并不恰当。这是一个完全有效的例子。

&#13;
&#13;
function yep() {
     alert('Yep');
}

function again() {
    alert('Again');
}

var view_functions = [
    yep,
    again
];

for (var i = 0; i < view_functions.length; i++) {
    view_functions[i]();
}
&#13;
&#13;
&#13;

如果您想在代码中获得一些设计帮助,可以介绍一个工厂。这具有使未知函数名明确的附加好处。

&#13;
&#13;
function yep() {
     alert('Yep');
}

function again() {
    alert('Again');
}

function functionFactory(name) {
    switch (name) {
        case 'yep':
            return yep;
        case 'again':
            return again;
        default:
            throw `${name} not a known function in functionFactory`;
    }
}

var view_functions = [
    'yep',
    'again'
];


for (var i = 0; i < view_functions.length; i++) {
    var func = functionFactory(view_functions[i]);
    func();
}
&#13;
&#13;
&#13;

如果你只有字符串名称,我建议你不要使用字符串名称......但是你可以使用eval ...

&#13;
&#13;
function yep() {
     alert('Yep');
}

function again() {
    alert('Again');
}

var view_functions = [
    'yep',
    'again'
];

for (var i = 0; i < view_functions.length; i++) {
    var n = view_functions[i] + '()';
    eval(n);
}
&#13;
&#13;
&#13;

但为什么不将实际的功能存储在数组中呢......