2011-04-20 44 views
0

我有一個函數:用字符串調用javascript函數?

var greet = function (name) { 
    console.log("Hi " + name); 
} 

如果我有一個字符串「迎(‘埃裏克’)」,纔有可能將其轉換爲一個函數調用傳遞「埃裏克」作爲參數?

回答

2

eval()是你的朋友! http://www.w3schools.com/jsref/jsref_eval.asp

+2

哦完全忘了eval()。它是不是相反,它的邪惡? – ajsie 2011-04-20 06:12:29

+0

@weng Eval只有在你誤用它的時候纔是邪惡的 – 2011-04-20 06:15:12

+2

在你的回答中,有一千個尖叫着的童貞女正在撕裂他們的肉體。 – Zirak 2011-04-20 06:15:51

1

我不確定我已經正確理解您的問題,但您是否在尋找eval()函數?

eval("greet('eric')"); 
1

這是因爲輸入

eval("greet('eric')"); 
1

一樣簡單而不eval

var greet = function (name) { 
     console.log("Hi " + name); 
    }, 
    greetstr = 'greet("Eric")'; 

var greeter = greetstr.split('("'); 
window[greeter[0]](greeter[1].replace(/\)|"/g,'')); 

底線1:use eval with care
底線2:避免這樣的結構。

只是要確保你有所有的可能性@您的處置:setTimeout(greetstr,0);
嗯,有是有一個eval某處;)

+0

我猜eval()確實是我的朋友在這種情況下=) – ajsie 2011-04-20 06:56:54

2

你,我,他她,他們FWORD( 'ING')討厭eval。總有另一種方式。

callMethod = function(def) { 
    //all the variables are function references 
    var approvedMethods = {greet: greet, love: love, marry: marry, murder: murder, suicide: suicide}, 
     split = def.split(/\(/); //split[0] contains function name, split[1] contains (unsplit) parameters 

    //replace last) and all possible string detonators left-over 
    split[1] = split[1].replace(/\)$/, '').replace(/[\'\"]/g, '').split(','); //contains list of params 

    if (!approvedMethods[split[0]]) 
     return 'No such function.'; 

    approvedMethods[split[0]].apply(window, split[1]); 
} 
//Called like this: 
callMethod("greet('eric')"); 

用任何替換窗口引用。