关于jquery:将函数名传递给带有json的函数

Pass function name to function with JSON

我想将两个函数名传递给带有JSON的函数,但无法使其工作。我拿着这些东西在脑子里想的太多了。

这是我的功能。myfunc应该调用传递给它的两个函数(mybefore和myafter)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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打电话的方式

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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://js fiddle.net/wvpga/


你不是在说什么有趣的事。你真正做的是

1
("myBefore")();

这是一个错误。

如果mybefore和myafter函数在全局范围内,则可以使用window["stringname"]。

1
2
3
4
5
6
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]]();
}


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

您需要像检查func["before"]一样检查它,根据您的实现,func[before]是字符串而不是函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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
});

演示


有点像…

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

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

1
2
3
4
5
      var FunctionName =  func[before];        
      if (typeof(window[FunctionName]) ==="function")
     {
        window[FunctionName]();
      }

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