使用 JSON 将函数名称传递给函数
Posted
技术标签:
【中文标题】使用 JSON 将函数名称传递给函数【英文标题】:Pass function name to function with JSON 【发布时间】:2014-02-07 06:21:59 【问题描述】:我想使用 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");
【问题讨论】:
func[before] 是一个字符串...不是函数。 【参考方案1】: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
【讨论】:
感谢 Satpal 的工作演示。你能解释一下为什么函数 myBefore 和 myAfter 被分配为变量,是否可以像在我的原始代码中一样将它们创建为函数? @Damian,我更喜欢这样。使用命名函数也可以使用示例:jsfiddle.net/HBLA4/1。欲了解更多信息,请访问***.com/questions/114525/… 效果很好!我实际上更喜欢你对凯文的回答......我认为代码看起来更干净。如果我能授予你背心答案我会的,但我已经接受了凯文的:(【参考方案2】:类似...
function myFunc(obj)
var func = $.parseJSON(obj);
if (typeof func[before] === "function") func.before();
// do some stuff
if (typeof func[after] === "function") func.after();
【讨论】:
【参考方案3】:你没有调用函数。你真正在做的是
("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】:由于函数是全局声明的,您可以从全局对象(窗口)中获取它们。
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/
【讨论】:
@Damian 很高兴我能帮上忙!【参考方案5】:这个怎么样? window["yourfunctionname"]();
var FunctionName = func[before];
if (typeof(window[FunctionName]) === "function")
window[FunctionName]();
或
function myFunc(obj)
var func = $.parseJSON(obj);
if (func[before] === "myBefore") before();
// do some stuff
if (func[after] === "myAfter") after();
【讨论】:
以上是关于使用 JSON 将函数名称传递给函数的主要内容,如果未能解决你的问题,请参考以下文章