2016-07-22 28 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,並確保用戶可以訪問它。