动态构造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);