传递函数名称作为参数执行

时间:2012-11-10 09:41:48

标签: javascript

我正在使用$ .ajax函数,它有两个目的,根据上下文,我想在回调中执行不同的函数。

function MyAjaxCall(SomeParameter, CallBackFunctionName) {

  $.ajax({
   ...
   success: function (msg) {

     var TheData = msg.hasOwnProperty("d") ? msg['d'] : msg;
     // here: "execute the function in parameter CallBackFunctionName 
     // AND pass it the parameter TheData
  }
}

如何编写函数名称为参数的行,我想将其作为参数传递给。

注意,此刻,我写的是这样的:

if (CallBackFunctionName === "SomeFunctionName1") {
   SomeFunctionName1(TheData);
} else {
   SomeFunctionName2(TheData);
}

2 个答案:

答案 0 :(得分:4)

如果函数被定义为全局函数,则使用:

window[functionName](arguments);

如果不是,那么改变MyAjaxCall的调用方式如下:

MyAjaxCall.apply(thisArg, [SomeParameter, CallBackFunction]); //thisArg is the value of the this object inside MyAjaxCall().

然后在MyAjaxCall()内执行此操作:

function MyAjaxXall(SomeParam, CallBackFunction){
  var me = this; //the object supplied through thisArg while calling.
  $.ajax({
     success : function(msg)
     {
         //whatever processing you want
         me[CallBackFunction](arguments);
     }

  });
}

或者您可以将对象添加为MyAjaxCall()

的参数的一部分
function MyAjaxCall(SomeParam, obj, CallBackFunction)
{

      $.ajax({
         success : function(msg)
         {
             //whatever processing you want
             obj[CallBackFunction](arguments);
         }

      });
}

当使用它来调用全局函数时:

MyAjaxCall(SomeParam, window, CallBackFunction);

答案 1 :(得分:2)

假设通过变量CallBackFunctionName传递名称的已定义函数是全局的,您可以这样做:

window[CallBackFunctionName](TheData)

您也可以将实际功能传递给MyAjaxCall,如下所示:

var MyCallbackFunction = function(data){ console.log(data) }
MyAjaxCall({param1: 'value1'}, MyCallbackFunction)

这样你就可以执行以下功能:

function MyAjaxCall(SomeParameter, CallBackFunction) {

  $.ajax({
   ...
   success: function (msg) {

     var TheData = msg.hasOwnProperty("d") ? msg['d'] : msg;
     CallBackFunction(TheData)
  }
}