将函数名称传递给JSON函数

时间:2014-01-17 19:17:25

标签: jquery json function parameters

我想将两个函数名称传递给具有JSON的函数,但无法使其工作。我对这些东西很满意。

这是我的功能。 myFunc应该调用传递给它的两个函数(myBefore和myAfter)。

function myFunc(obj) {
  var func = $.parseJSON(obj);
  if (typeof func[before] === "function") func[before]();
  // do some stuff
  if (typeof func[after] === "function") func[after]();
}

function myBefore() {
  alert("before");
}

function myAfter() {
  alert("after");
}

以下是我如何调用myFunc

myFunc({"before": "myBefore", "after" :"myAfter"});

5 个答案:

答案 0 :(得分:0)

这个怎么样? window["yourfunctionname"]();

      var FunctionName =  func[before];         
      if (typeof(window[FunctionName]) === "function")
     {
        window[FunctionName]();
      }

OR

    function myFunc(obj) {
      var func = $.parseJSON(obj);
      if (func[before] === "myBefore") { before();}
      // do some stuff
      if (func[after] === "myAfter") { after(); }
    }

答案 1 :(得分:0)

像...一样的东西。

    function myFunc(obj) {
var func = $.parseJSON(obj);
      if (typeof func[before] === "function") func.before();
      // do some stuff
      if (typeof func[after] === "function") func.after();
    }

答案 2 :(得分:0)

myFunc应该调用传递给它的2个函数

您需要检查func["before"],根据您的实施func[before]字符串而非功能

function myFunc(func) {
    //You don't need to parse. As its already a JSON
    //var func = $.parseJSON(obj); 

    if (typeof func["before"] === "function") 
        func["before"]();

    // do some stuff

    if (typeof func["after"] === "function") 
        func["after"]();
}

var myBefore = function () {
    alert("before");
}

var myAfter = function () {
    alert("after");
}

myFunc({
    "before": myBefore,
    "after": myAfter
});

DEMO

答案 3 :(得分:0)

你不是在说一个功能。你真正在做的是

("myBefore")();

这是一个错误。

如果myBefore和myAfter函数在全局范围内,您可以使用window [“stringName”]。

function myFunc(obj) {
    //var func = $.parseJSON(obj);  //if it is object being passed in than this is an error
    var func = obj;
    window[func[before]]();
    window[func[after]]();
} 

答案 4 :(得分:0)

由于函数是全局声明的,因此可以从全局对象(窗口)中获取它们。

function myFunc(obj) {
  if (typeof window[obj.before] === "function") window[obj.before]();
  // do some stuff
  if (typeof window[obj.after] === "function") window[obj.after]();
}

function myBefore() {
  alert("before");
}

function myAfter() {
  alert("after");
}

myFunc({"before": "myBefore", "after" :"myAfter"});

JS小提琴: http://jsfiddle.net/wvPgA/