2013-07-31 31 views
0

在JavaScript中,我有一個這樣的字符串:如何執行包含函數名稱和參數的字符串?

"doSomething('param1','param2')" 

而且我要執行它。我知道,我可以正常使用

window['doSomething']('param1', 'param2'); 

但是,只有當我的函數名稱從參數是不同的作品。在我的情況下,他們已經合併。我認爲我可以使用eval(),但共識似乎是應該避免的。有另一種方法嗎?

編輯: 解答更多信息的要求:我使用這個字符串是這樣的:

<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")"> 

凡closeModalView_Yes將關閉該模式是/否窗口,然後執行給定的功能,雖然有時我可能會通過它doSomethingElse(param1),它只需要一個參數。

+0

如果您知道字符串中的內容,並且不會感到驚訝,只需使用eval即可。我的意思是,你永遠不能允許用戶分配字符串的值。 – 2013-07-31 19:47:16

+0

你是如何獲得該字符串的,爲什麼?難道你不能讓它成爲一個數組嗎?['doSomething','param1''param2']'? – Bergi

+1

爲什麼不將回調傳遞給'closeModalView_Yes'呢?就像'closeModalView_Yes(function(){doSomething('param1','param2');})'。 –

回答

1

使用eval,就像:

eval("console.log('hey', 'here I am')"); 

然而eval is pretty dangerous,它不是建議。

如果你能(我們仍然沒有你的情況下,很多信息),使<script>標記之間你的JavaScript在你的模板,使其成爲「常規代碼」,更容易調試。

另外一個好的做法是傳遞數據(即使用JSON)而不是代碼。嘗試重新思考你的邏輯或提供更多信息。

+0

關於「安全性」,使用'eval'或使用'script'元素執行代碼沒有區別。 –

+0

@FelixKling在安全性方面 - 並不多。在調試方面 - 是的! ;) – oleq

+0

我同意。但是既然你在同一段中提到過,那麼'腳本'就更安全了。只是想澄清一下:) –

1
<a id="YesButton" onclick="closeModalView_Yes("doSomething('param1','param2')")"> 

你真的不應該傳遞作爲字符串,而是作爲一個功能:

closeModalView_Yes(function(){ doSomething('param1','param2'); }); 

連同

function closeModalView_Yes(callback) { 
    // do whatever needs to be done to close the window 
    // and after that 
    callback(); 
} 

順便說一句,你現在的做法HTML甚至不是有效的,它將需要是

<a id="YesButton" onclick="closeModalView_Yes(&quot;doSomething('param1','param2')&quot;)"> 
<!--           ^^^^^^        ^^^^^^ --> 

您可以通過註冊事件via javascript而不是內聯屬性來避免這種情況。

相關問題