0

これが可能かどうかはわかりません。このようなパラメータとして関数名を渡したい

loadContent("http://test.com/", specialFunction);

specialFucntion単なる文字列です:

function loadContent(href, functionIWant){
    $.ajax({
        type: "GET",
        url: href,
        dataType: "json",
        success: function(res, textStatus, xhr) {
            helper();
            functionIWant + "()"; //So this would be treated as function
                                  //and it actually calls specialFunction()
                                  //is it possible for this?
        }
    });
}

どうすればこれを達成できますか?

アドオン

たとえば、関数名の配列を渡すとしたら、どのように呼び出すのでしょうか?

for(var i = 0; i < functionIWant.length; i++){
   functionIWant[i]; // how? appeciate a lot :)
}
4

4 に答える 4

3

あなたはそれを行うことができますfunctionIWant()

提供されたスニペットを使用した例:

function loadContent(href, functionIWant)
{
    $.ajax({
        type: "GET",
        url: href,
        dataType: "json",
        success: function(res, textStatus, xhr) {
            helper();
            functionIWant();
        }
    });
}

あなたの補遺のために

次の 3 つの関数を呼び出したいとします。

function foo() {alert("Foo")}
function bar() {alert("bar")}
function baz() {alert("baz")}

関数名の配列を文字列として渡された場合に推奨できる最善の方法は、こちらのアドバイスに従うことです。基本的には、次のようにするだけです。

// Assuming FunctionIWant is an array of strings that represent function names
FunctionIWant = ["foo","bar","baz"];

...

for(var i=0;i<FunctionIWant.length;i++)
    window[FunctionIWant[i]]();

ただし、たとえば FunctionIWant が実際の関数の配列である場合は、次のように単純にそれらを反復処理して個別に呼び出すことができます。

FunctionIWant = [foo,bar,baz] // note, these are not strings

for(var i=0;i<FunctionIWant.length;i++)
    FunctionIWant[i]();

ほとんどの場合、文字列としてではなく、関数を割り当てる方がよいでしょう

于 2013-01-20T04:13:32.440 に答える
2

パラメーターで表される関数を呼び出したい場合は、それが関数の名前であるかのように呼び出します。

function loadContent(href, callback)
{
    $.ajax({
        type: "GET",
        url: href,
        dataType: "json",
        success: function(res, textStatus, xhr) {
            helper();
            callback();
        }
    });
}
于 2013-01-20T04:14:09.570 に答える
1

それfunctionIWantは文字列であり、関数への参照ではないと思います[質問するときはそれを明確にする必要があります]

その場合は、

window[functionIWant]();

関数がグローバルスコープにある場合、これは機能します。関数への参照を渡すか、関数に名前空間を付けた方がよいでしょう。

var myFuncs = {
    foo : function(){ alert("asdf"); },
    bar : function(){ alert("qwerty"); }
};

var functionIWant = "foo";
myFuncs[functionIWant]();
于 2013-01-20T04:26:54.653 に答える
0

たとえば、2 つの関数があるとします。

var function1 = function( value ) {
  console.log( "foo: " + value );
};

var function2 = function( value ){
  console.log( "bar: " + value );
};

そしてfunctionIWant配列には関数の名前があり、

function loadContent(href, functionIWant)
{
   $.ajax({

    type: "GET",
    url: href,
    dataType: "json",
    success: function(res, textStatus, xhr) {
    helper();

    var callbacks = $.Callbacks();

    for(var i = 0; i < functionIWant.length; i++){
     callbacks.add( functionIWant[i] ); //on i=0 add function1
     callbacks.fire( "hello" );          // will fire function1
    }



      }
   });
  }
于 2013-01-20T04:34:04.797 に答える