可能重复:
How to execute a JavaScript function when I have its name as a string
挣扎着这个,我似乎找不到合适的资源。
背景:我正在创建一个步骤系统,我正在一个属性data-step="1"
中传递direcition / order。这将控制将显示的ID(这些部分很容易),还需要调用以获取正确信息的函数。
问题基本上是,我如何调用一个我需要动态构建名称的函数?
IE:
step1(); step2();
除非我想在那里动态添加该号码。
// In an essense, what I'm trying to achieve:
// It's always called step and then followed by a number
[step + directionNumber](); // which isn't working
还试图避免使用eval
,因为我们都知道它是邪恶的:)
答案 0 :(得分:3)
使用
window["step" + directionNumber]();
当你在全球范围内写作时
function someName(){
}
您正在定义名称为window
的全局对象(someName
)的属性,并为该函数赋值。
相当于
window.someName = function(){
}
因此,您可以将您的功能称为window.someName();
,或在此处更有用,window['someName']();
更好的解决方案可能是定义一组函数:
var stepFunctions = [];
stepFunctions[0] = function(){};
然后您可以使用stepFunctions[directionNumber]();
答案 1 :(得分:1)
将您的函数存储在Object中,以便按名称动态访问它们。
var funcs = {};
funcs.step1 = function(){ console.log("foo"); };
funcs.step2 = function(){ console.log("bar"); };
var text = "step",
number = 1;
funcs[text + number](); // foo
++number;
funcs[text + number](); // bar