我正在尝试构建一个lib,我需要动态调用函数,具体取决于我在参数中的变量,如
strategies = min
function dispatchRuleToStrategy(strategies)
{
$.each(strategies, function(index, value) {
strategy = "strategy_" + value;
});
}
function strategy_min()
{
// do something
}
如何从strategy_min()
调用函数dispatchRuleToStrategy()
?
我一直在尝试一些没有任何工作的事情。
感谢您的帮助
答案 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+"()");
});