2017-10-05 77 views
1

我有一个包含一堆函数名称的数组。我没有将函数存储在一个对象中。使用字符串名称从数组中运行函数

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

这不行,有什么想法?

谢谢。

+0

你可以自己存储函数吗? –

+0

https://stackoverflow.com/questions/359788/how-to-execute-a-javascript-function-when-i-have-its-name-as-a-string – Peter

+0

如果数组存储名称字符串,则不能称之为那些。请发布完整的代码,显示“view_functions”是什么以及函数在哪里定义。 – Bergi

回答

0

您发布的代码有效,因此定义函数的代码可能不太正确。这是一个完全可行的例子。

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](); 
 
}

如果你想获得一点的设计有助于在你的代码,你可以介绍一家工厂。这有明确的未知函数名称的附加好处。

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(); 
 
}

如果你只有串名字,我建议不使用字符串名称...但你可以去充满邪恶和使用eval ...

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); 
 
}

但是,为什么不把实际功能存储在数组中。

+0

不知道为什么有人低估了这一点。它确实有效。 – agm1984

+0

有些人只是喜欢投票它似乎工作正常 – schylake

+0

“我有一个数组,有一堆函数名称,我不存储函数的对象。”这实际上并不回答所问的问题。 – smarx

相关问题