我正在阅读答案,甚至理解一些用户的观点(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 中不使用(我也不会使用)函数。