0

myFunctionを介して渡される名前に以前に定義された引数を持つ別の関数をmyFunctionで実行したいと思います。

私は現在持っています

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

画像の番号 (1 ~ 47) を渡すと、アラートでアナウンスされます。

アラートの代わりに、次の名前で関数を実行したい

selectImage1(){
stuff;
}

selectImage2(){
other stuff;
}

...

selectImage47(){
even more stuff;
}

私は勉強しながら学んでおり、JavaScript の経験はあまりありません... ありがとう

4

6 に答える 6

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 に答える
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

他の人が言ったように、見直す必要があることは間違いありません。おそらく、47 個の関数すべてを 1 つの関数にまとめることができるはずです。そうは言っても、あなたの質問に答えるために、JavaScriptの関数はファーストクラスのオブジェクトであるため、オブジェクトでできることは何でもできます。ここでの重要な点は、それらをパラメーターとして渡すことができるということです。以下のようなものがあなたの目的に役立つはずです。

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

パラメーター関数がいくつかのパラメーターを受け取る必要がある場合は、グローバルなもの、またはクロージャー スコープ内のもの (param または親関数に対してローカルな変数) を渡すことができることに注意してください。

于 2013-07-19T01:35:21.300 に答える
-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 に答える