使用函数名称中的变量运行Javascript函数

时间:2013-07-19 01:24:35

标签: javascript

我想让 myFunction 运行另一个函数,其名称中先前定义的参数通过 myFunction 传递。

我目前有

function myFunction(SelectedImageNumber)
{
alert(SelectedImageNumber);
}

传递图像编号(1 - 47),并在警报中宣布。

而不是警报,我希望它以

的名义运行一个函数
selectImage1(){
stuff;
}

selectImage2(){
other stuff;
}

...

selectImage47(){
even more stuff;
}

我正在学习,并且没有很多javascript经验...... 感谢

6 个答案:

答案 0 :(得分:0)

此模式将允许您将代码注入另一个函数。

var selectImage1 = function(){};
var selectImage2 = function(){};
var selectImage3 = function(){};

function RunOtherFunction(f)
{
  f();
}

//call it like this

RunOtherFunction(selectImage1);
...
RunOtherFunction(selectImageN);

其他建议:

但是,我会同意那些认为定义42个函数来完成非常相似的工作是疯狂的人。 selectImage1 ... selectImageN表明这里有一些约定。也许你可以根据约定和一些简单的逻辑将所有内容整合到一个函数中。我们需要看看selectImage(n)做了什么,以便提出建议的方法

答案 1 :(得分:0)

像其他人所说,有一些东西需要重新审视。您很可能应该将所有47个函数都压缩到一个函数中。话虽如此,回答你的问题,javascript中的函数是一流的对象,因此你可以用它们做任何事情,你可以用对象做。这里的相关点是你可以将它们作为参数传递。像下面这样的东西应该符合你的目的。

function (funcToRun) {
   return funcToRun && funcToRun();
}

请注意,如果您需要参数函数来获取某些参数,则可以传递全局或闭包范围内的任何内容(父函数本地的参数或变量)

答案 2 :(得分:0)

由于JavaScript中的函数是对象,因此可以将它们列在数组中:

var myFuncs = [
  function one(){},
  function two(){},
  function three(){},
  ...
];

然后你可以创建一个通过索引调用它们的函数:

// assuming n starts at 1
function myFunction(n) {
  myFuncs[n-1](); // n=1 calls function "one"
}

但是,我认为这可能是不必要的,你应该在一个函数中处理逻辑并决定在那里做什么:

function selectImage(n) {
  switch(n) {
    case 1:
      // do something if n==1
      break;
    case 2:
      // do something if n==2
      break;
    ...
  }
}

这个想法是抽象逻辑,直到你找到一个共同的模式。即使switch语句可能太长也可以简化,但这比47个函数要好。

答案 3 :(得分:0)

就像其他人所说的那样,你可能不想这样做。但是,如果由于某些奇怪的原因,你可以简单地创建一个函数数组并调用与你传入的数字相对应的函数,如下所示:

var selectImage1 = function() {...}
...

var array_of_functions = [
  selectImage1,
  selectImage2,
  selectImage3,
  ...
  selectImage47
]

function myFunction(selectedImageNumber)
{
  array_of_functions[selectedImageNumber-1]();
  // The offset is because you didn't zero-index the image functions.
}

答案 4 :(得分:0)

为什么不制作一个物品?

var selectImage = function(number) {
    var number = number;

    function foo() {
        alert(number);
    }

    return {
        'foo': foo
    };
 };

function somefunction (selectedImage) {
    selectedImage.foo();
}

somefunction(selectImage(1));

当然,你必须知道对象的内部工作原理。或者也许我在想你想做什么?

答案 5 :(得分:-1)

function selectImageByIndex(index){
    selectImage[index]();
}

var selectImage = {
    "1": function(){
        alert(1);
    },
    "27": function(){
        alert(27);
    }
}
selectImageByIndex(27);  //displays "27"