动态构造js函数名

时间:2011-04-09 01:17:43

标签: javascript jquery

我想以这种方式调用函数

redBall(this);

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

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

4 个答案:

答案 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);