动态构造js函数名

我想以这种方式调用函数

redBall(this); 

但我想从一个字符串动态构造。 我试过这样的东西,但它不起作用。

 var color = 'red'; color+'Ball'(this); 

你可以这样做:

 var ballFunctions = { redBall: function(obj) { alert("Hi, I'm a red ball"); }, blueBall: function(obj) { alert("Hi, I'm a blue ball"); } }; color = "red"; ballFunctions[color + "Ball"](this); color = "blue"; ballFunctions[color + "Ball"](this); 

您也可以将此与Jimmy的答案结合起来并执行:

 function ball(color, obj) { ballFunctions[color + "Ball"](obj); // Or use the window object if your funcs are in the global namespace like Cameron said // window[color + "Ball"](obj); } color = "red"; ball(color, this); 

下标隐式window对象:

 window[color + 'Ball'](this) 

你的例子试图调用字符串'Ball' (由于字符串不可调用而没有意义),然后将结果与color连接 – 不是你想要的。

动态命名的函数不是一个很好的实践。 那这个呢?

 function Ball(color, object) { // do stuff } 

然后通过以下方式调用它: Ball('red', this);

为了避免对现有代码(我假设是全局范围的)进行任何修改,您可以使用:

 window[color + 'Ball'](this);