3

別の関数内で関数を動的に実行したい...

言ってみましょう:

<script>
var x = function(r,s){
    r(s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB");
}
</script>

これは可能ですか?関数 x の引数から「r」を関数名として取り、それを実行したいと考えています。

r=a の場合、関数 a() をトリガーします

r=b の場合、代わりに関数 b がトリガーされます...

どうすればそれができますか?

4

3 に答える 3

5

必要に応じて各関数を簡単にテストrして呼び出すことができます。

if (r === 'a') {
    a(s);
} else if (r === 'b') {
    b(s);
}

または、これに多くの関数がある場合、または事前にすべてを知っているとは限らない場合は、それらを で整理し、ブラケット演算子Objectを使用して、それらにアクセスするためのキー名として扱うことができます。r

var commands = {
    a: function(item){
        alert("aA");
    },

    b: function(item){
        alert("bB");
    }
};

var x = function (r, s) {
    var command = commands[r];

    if (typeof command === 'function') {
        command(s);
    }
};

x('a', 'foo'); // alerts `aA`

または、現在の の定義を使用して、引数自体としてaandを渡すだけでもかまいません。bx()

x(a, 'foo'); // calls `a` as `r`, passing 'foo' along
于 2013-09-05T04:39:56.037 に答える
4

関数を呼び出すときに、関数の名前を x の最初のパラメーターとして渡します。

x(a, {}); // alert("aA");
x(b, {}); // alert("bB");

文字列ではなく、関数への参照を渡していることに注意してください。これは、JavaScript の関数はオブジェクトであり、値ではなく参照によって渡されるためです。したがって、var a = function() {...};実際には、変数 a が関数への参照を保持することを意味します。

于 2013-09-05T04:39:26.507 に答える
3

あなたは次のように意味します:

var x = function(r,s){
    window[r](s);
}
var a = function(item){
    alert("aA");
}
var b = function(item){
    alert("bB:" + item);
}
x('b', 'test');
于 2013-09-05T04:39:28.723 に答える