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();
        }
    });
}

对于您的附录

假设您要调用以下三个函数

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

例如你有两个功能,

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 回答