我有一個函數:用字符串調用javascript函數?
var greet = function (name) {
console.log("Hi " + name);
}
如果我有一個字符串「迎(‘埃裏克’)」,纔有可能將其轉換爲一個函數調用傳遞「埃裏克」作爲參數?
我有一個函數:用字符串調用javascript函數?
var greet = function (name) {
console.log("Hi " + name);
}
如果我有一個字符串「迎(‘埃裏克’)」,纔有可能將其轉換爲一個函數調用傳遞「埃裏克」作爲參數?
eval()是你的朋友! http://www.w3schools.com/jsref/jsref_eval.asp
我不確定我已經正確理解您的問題,但您是否在尋找eval()函數?
eval("greet('eric')");
這是因爲輸入
eval("greet('eric')");
一樣簡單而不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
某處;)
我猜eval()確實是我的朋友在這種情況下=) – ajsie 2011-04-20 06:56:54
你,我,他她,他們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')");
用任何替換窗口引用。
哦完全忘了eval()。它是不是相反,它的邪惡? – ajsie 2011-04-20 06:12:29
@weng Eval只有在你誤用它的時候纔是邪惡的 – 2011-04-20 06:15:12
在你的回答中,有一千個尖叫着的童貞女正在撕裂他們的肉體。 – Zirak 2011-04-20 06:15:51