参数作为函数名称

时间:2013-01-20 04:11:39

标签: javascript jquery function parameters

我不确定这是否可行。我想传递一个函数名作为参数,如

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 个答案:

答案 0 :(得分: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")}

如果您将一组函数名称作为字符串传递,我可以推荐的最好的方法是遵循建议here。基本上,你可以这样做:

// 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]();

在大多数情况下,您最好分配功能而不是字符串

答案 1 :(得分:2)

如果您想尝试调用参数表示的函数,只需将其称为该函数的名称:

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

答案 2 :(得分:1)

我猜测functionIWant是一个字符串,而不是对函数的引用[在提问时你应该清楚明白]

如果是这种情况,则需要

window[functionIWant]();

如果函数在全局范围内,那将会有效。传入函数的引用或命名函数会更好。

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

var functionIWant = "foo";
myFuncs[functionIWant]();

答案 3 :(得分: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
    }



      }
   });
  }