在Javascript中执行动态命名的函数

时间:2012-11-28 18:42:58

标签: javascript function dynamic

  

可能重复:
  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,因为我们都知道它是邪恶的:)

2 个答案:

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