3

我有包含函数名称的 JSON:

{
 "login": "do_login",
 "logout": "do_logout"
}

解析该 JSON 后是否可以调用函数do_logindo_logout

我的意思是:

var obj = JSON.parse({"login": "do_login","logout": "do_logout"});
obj.login();
4

3 回答 3

9

我不确定我是否理解正确,但试试这个

window[obj.login]();
于 2012-10-22T06:30:39.907 回答
1

您可能对 JSON 是什么感到困惑。JSON 是一个表示对象的字符串。您上面所拥有的称为对象文字。

JSON 字符串看起来像这样 "{\"login\":\"do_login\",\"logout\":\"do_logout\"}"

这是一个常见的错误,因为两者都有相似的布局。这绝非偶然。当 Crawford 提出 JSON 时,他以 javascript 对象文字为模型。

函数不会转换为 JSON 字符串,JSON.stringify 将忽略它们。

例子:

var foo = {
    bar: function() {
        console.log('bar');
    },
    something: 'something'

}

JSON.stringify(foo) // "{\"something\":\"something\"}"

我可以在我的代码中运行 foo.bar() ,但这不是 JSON,它是一个 JS 对象。

于 2012-10-22T06:38:42.083 回答
0

你可以这样做:

var obj = function(){};
obj.login = function(){
 //login code
};

obj["login"]();//call login function

这是一个措辞更好的例子:

var Functions = function(){};
Functions.do_login = function(){
 //login code
};
var callbacks = JSON.parse('{"login":"do_login","logout":"do_logout"}');
Functions[callbacks["login"]]();

查看一个工作小提琴以查看它的实际效果:http: //jsfiddle.net/hvx7m/2/

于 2012-10-22T06:37:33.260 回答