2012-04-27 48 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