我想以这种方式调用函数
redBall(this);
但我想从字符串动态构造。我试过这样的东西,但它不起作用。
var color = 'red';
color+'Ball'(this);
答案 0 :(得分:5)
你可以这样做:
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);
答案 1 :(得分:5)
下标隐式window
对象:
window[color + 'Ball'](this)
你的例子试图调用字符串'Ball'
(由于字符串不可调用,这没有意义),然后将结果与color
连接起来 - 不是你想要的。< / p>
答案 2 :(得分:4)
动态命名的函数不是一个好习惯。那怎么样?
function Ball(color, object)
{
// do stuff
}
然后通过:Ball('red', this);
答案 3 :(得分:1)
为避免对现有代码(我假设是全局范围的代码)进行任何修改,您可以使用:
window[color + 'Ball'](this);