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个函数
您需要像检查
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(); } |
这个怎么样?
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(); } } |