私は答えを読んでいて、一部のユーザーのポイント(JSONはデータにのみ使用する必要がある)を理解し、これが正しいことに同意して、概念実証の例を作成しました。見てください。
// just a regular object
var obj = {
a: "aaa",
b: "bbb",
c: function() {
return this.a;
}
};
console.log( obj.c() ); // prints "aaa"
// isn't it json just because it has a function? ExtJS will treat it like JSON, but jQuery not
var json = "{" +
"\"a\": \"aaa\", " +
"\"b\": \"bbb\", " +
"\"c\": function() {" +
" return this.a;" +
"}" +
"}";
// ok, the "json" above
console.log( json );
//var jsonObj = $.parseJSON( json ); // does not work
//var jsonObj = eval( json ); // does not work too
var jsonObj = Ext.decode( json ); // it works! shortcut for Ext.JSON.decode
console.log( jsonObj.c() ); // prints "aaa"
nnnnnnが投稿したものとほぼ同じですが、答えを補足するために、私も投稿すると思います。jsFiddle: http: //jsfiddle.net/davidbuzatto/rhKAM/
したがって、JSONの定義と矛盾する場合でも、JSONは通常のオブジェクト初期化子sintaxを使用して作成されたオブジェクトと同じ特性を持つことができる(または持つべきである)と思います。その名前は「軽量」オブジェクト表記ではなくJavaScriptオブジェクト表記であるためです。 。デシリアライザーはターゲット言語によっては関数をデシリアライズできないことは知っていますが、ExtJSがこの「動作」をサポートしているのはなぜですか?ここで良い議論を見つけることができます:JSON結果で関数を定義することは有効ですか?
明確にするために。JSON内で関数を使用していません(また、使用しません)。