0

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

我目前有

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

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

而不是警报,我希望它运行一个名为

selectImage1(){
stuff;
}

selectImage2(){
other stuff;
}

...

selectImage47(){
even more stuff;
}

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

4

6 回答 6

0

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

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

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

于 2013-07-19T01:35:21.300 回答
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 个函数要好。

于 2013-07-19T01:35:25.393 回答
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.
}
于 2013-07-19T01:35:31.963 回答
0

为什么不做一个对象?

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

    function foo() {
        alert(number);
    }

    return {
        'foo': foo
    };
 };

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

somefunction(selectImage(1));

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

于 2013-07-19T01:42:18.923 回答
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) 做了什么,以便提出合并的方法

于 2013-07-19T01:27:16.033 回答
-1
function selectImageByIndex(index){
    selectImage[index]();
}

var selectImage = {
    "1": function(){
        alert(1);
    },
    "27": function(){
        alert(27);
    }
}
selectImageByIndex(27);  //displays "27"
于 2013-07-19T01:31:06.507 回答