0

可能重复:
当我将其名称作为字符串时如何执行 JavaScript 函数

与这个苦苦挣扎,我似乎无法找到一个好的资源。

背景:我正在创建一个步进系统,并且我在一个属性中传递方向/顺序data-step="1"。这控制了将显示的 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,因为我们都知道它是邪恶的:)

4

2 回答 2

3

采用

window["step" + directionNumber](); 

当您在全局范围内编写时

function someName(){
}

您正在使用函数window的名称someName和值定义全局对象 ( ) 的属性。

相当于

window.someName = function(){
}

所以你可以把你的函数称为window.someName();或者,在这里更有用的是,window['someName']();

更好的解决方案可能是定义一个函数数组:

var stepFunctions = [];
stepFunctions[0] = function(){};

那么您可以使用stepFunctions[directionNumber]();

于 2012-11-28T18:43:22.360 回答
1

将您的函数存储在一个对象中,以便按名称动态访问它们。

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
于 2012-11-28T18:51:36.133 回答