2012-04-27 49 views
3

我試圖實現以下僞代碼:變量名在Javascript

function processAboutLink(){ 

} 

function processServicesLink(){ 

} 

var variableName = 'about'; 

process + variableName + Link(); 

var variableName = 'services'; 

process + variableName + Link(); 

我知道,上面的代碼是不是真實的,但邏輯表示。任何人都可以將我指向正確的方向嗎?

回答

8

這將是更方便的對象,因爲你可以動態地訪問屬性:

var processLinkFunctions = { 
    about: function() { ... }, 
    services: function() { ... } 
}; 

然後,它是那麼容易,因爲:

processLinkFunctions[variableName](); 

這是基本相同processLinkFunctions.about()如果variableName === "about"

-1

編輯不要使用eval。這似乎是危險的,並導致未定義的行爲。

錯誤的答案:

eval('process' + variableName + 'Link()'); 

應該工作

+0

你需要首先帽'variableName',但耶。 @Downvoter:這回答了問題。是的,它可能應該有一個警告,總是有一種比'eval'更好的方式,但是降低正確答案似乎相當苛刻。 – 2012-04-27 12:11:54

+0

感謝指針T.J. 似乎有人低估了而不知道爲什麼使用eval是不好的。從來不知道使用eval是不好的做法。 – amaters 2012-04-27 12:14:52

+0

@amaters對不起,我只是忍不住自己!這是一個自動的反應,任何時候我在答案中看到'eval' ... – Alnitak 2012-04-27 12:16:08

4

您可能需要使用對象文本的命名空間,而不是

var process = { 
    services: function(){...}, 
    about: function(){...} 
} 

然後美其名曰:

process[variable](); 
+0

@james感謝編輯 – Joseph 2012-04-27 12:11:26

1

如果您使t他功能的對象的屬性,然後你可以通過名字來稱呼他們(而不是訴諸eval!):

var functions = { 
    about: function() { ... }, 
    services: function() { ... } 
}; 

var name = 'about'; 
functions[name](); 
+0

謹慎解釋爲什麼訴諸eval不好? – amaters 2012-04-27 12:15:25

+0

@amaters因爲它會導致不安全的代碼和潛在的未定義行爲。在ES5嚴格模式下,它完全被禁止。 – Alnitak 2012-04-27 12:17:05