3

関数名を含む JSON があります。

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

その JSON を解析した後、関数do_loginとを呼び出すことは可能do_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 に答える