动态调用函数jQuery

时间:2015-02-04 16:54:27

标签: javascript jquery function dynamic call

我正在尝试构建一个lib,我需要动态调用函数,具体取决于我在参数中的变量,如

strategies = min
function dispatchRuleToStrategy(strategies)
{
    $.each(strategies, function(index, value) {
        strategy = "strategy_" + value;
    });
}

function strategy_min()
{
    // do something
}

如何从strategy_min()调用函数dispatchRuleToStrategy()

我一直在尝试一些没有任何工作的事情。

感谢您的帮助

5 个答案:

答案 0 :(得分:6)

使用对象创建功能字典,例如lib

var lib = {
    'strategy_min': strategy_min
};

然后您可以通过此词典中的键 Object

调用
lib['strategy_min']();

如果你已经命名了所有的功能,并且不想一遍又一遍地重新输入名称,那么你可以

var lib = {};
function addToLib(fn) {
    lib[fn.name] = fn;
}
// then
addToLib(strategy_min);
// or
[strategy_min].forEach(addToLib);

答案 1 :(得分:2)

将它们放在一个对象中并使用属性名称:

var strategy_table = {
    min: function() {
        // do something
    },
    max: function() {
        // do something else
    },
    ...
};

然后您可以strategy_table[value]

访问它们
$.each(strategies, function(index, value) {
    strategy_table[value]();
});

答案 2 :(得分:0)

其他人已经建议为函数创建包装器对象,但是,如果strategy_min()函数在全局范围内,则可以直接访问它:

window['strategy_' + value]();
浏览器中的

window指的是全局对象。括号表示法用于访问其键是动态生成的属性。这样您就可以访问函数,该函数是全局对象的属性,即window,并使用括号调用它。

答案 3 :(得分:0)

最后我发现了真正的问题。我在一个jquery文件准备就绪,这是一个闭包。我不知道今天之前有什么关闭。

感谢大家的帮助

答案 4 :(得分:-3)

您可以按以下方式使用eval()函数

 $.each(strategies, function(index, value) {
    strategy = "strategy_" + value;
    eval(strategy+"()");
});