2016-07-22 27 views
0
var arr = ['abc','xyz']; 

$.each(arr, function(i,val){ 
var val = val; //where I got abc, xyz here 
if(some condition){ 
    //run abc function but I don't want to do abc(), possible? 
} 

}); 

function abc(){} 
function xyz(){} 

而不是硬编码我的函数名称像abc(),有没有我可以将字符串(val)转换为可执行函数的任何位置?通过这种方式,我可以通过在数组中添加值来执行任何函数。将字符串转换为可执行函数javascript

+0

可能重复的[有没有一种方法来创建一个从字符串与JavaScript的功能?](http://stackoverflow.com/questions/7650071/is-there-a-way-to-create-a-function -from-a-string-with-javascript) – alexi2

回答

0

而是传递一个字符串,只是传递给函数自身的引用:

var arr = [abc, xyz]; 
 

 
$.each(arr, function(i, fn) { 
 
    if (true) { 
 
    fn(); 
 
    } 
 
}); 
 

 
function abc() { 
 
    console.log('abc'); 
 
} 
 

 
function xyz() { 
 
    console.log('xyz'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

ow这是天才 –

+0

但是如果(true)在那里呢? –

+1

没什么。我只是把它放在那里,因为你的代码中有'if(some condition)'。 –

0

假设你的职责是在全球范围内,可以通过window[functionname]()访问它们:

var arr = ['abc','xyz']; 
 

 
$.each(arr, function(i,val){ 
 
    window[val](); 
 
}); 
 

 
function abc() { 
 
    console.log('In abc()'); 
 
} 
 

 
function xyz(){ 
 
    console.log('In xyz()'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

这两个函数都应该是公共父对象的一部分。所以可以通过它们的属性名称来访问。 这里都是window对象的一部分。

var arr = ['abc', 'xyz']; 
 

 
$.each(arr, function(i, val) { 
 
    if (true) { // some condition. 
 
    window[val](); 
 
    } 
 

 
}); 
 

 
function abc() { 
 
    console.log('Inside the FN abc'); 
 
} 
 

 
function xyz() { 
 
    console.log('Inside the FN xyz'); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

0

的eval(STR)将运行代码,在字符串str。您确实需要信任str,并确保用户可以访问它。