字符串如下:"foo('argument1','argument2')"
執行帶有參數的函數從字符串
我怎麼能執行此功能,如JavaScript,而無需使用eval
?我知道你可以使用
window[func](arguments)
,
不過參數是字符串的一部分。我嘗試使用正則表達式,但我不知道如何做到這一點考慮到JavaScript沒有lookbehinds。有什麼建議麼?
字符串如下:"foo('argument1','argument2')"
執行帶有參數的函數從字符串
我怎麼能執行此功能,如JavaScript,而無需使用eval
?我知道你可以使用
window[func](arguments)
,
不過參數是字符串的一部分。我嘗試使用正則表達式,但我不知道如何做到這一點考慮到JavaScript沒有lookbehinds。有什麼建議麼?
有幾種方法可以做到這一點,一個已經被dystroy給出了。
一個稍微簡單的方法是這樣的:
var args = "foo('argument1','argument2')".split(/[()',]+/).slice(0,-1)
Function.prototype.call.apply(window[args[0]],args)
我喜歡這個。非常非常棒。 –
您是否意識到它較短的主要原因是它只能處理字符串? –
您可以使用此:
var s = "foo('argument1','argument2', 5, true)";
var m = s.match(/([^(]+)\(([^)]+)\)/);
if (m) {
var f = window[m[1]];
var args = m[2].split(',').map(function(v){
return JSON.parse(v.trim().replace(/^'/,'"').replace(/'$/,'"'))
});
f.apply(null,args);
}
Demonstration(打開控制檯)
請注意,這僅適用於原始參數。如果你想在沒有eval的情況下處理其他類型的參數,你最好定義你想要處理的類型。
如果我的答案的某些部分不清楚,請問,我會解釋。 –
很明顯。目的是讓我可以有一個內聯自定義事件(即:'')。我使用jQuery來告訴事件觸發,但我需要一種方法來執行'onmyevent'屬性給出的字符串。 –
你能解釋爲什麼你想這樣做嗎?從你說的話來看,'eval'是你唯一的選擇,但更多的信息會有所幫助。 – loganfsmyth
有人應該問一下,這個字符串是如何製作的?並且你不能構造更有用的東西,而是(例如JSON) –
如果你可以將參數轉換爲數組,你可以使用'window [func] .apply(null,args)'。 –