在我的客户端/服务器 Web 应用程序中,我正在生成大型 JSON 字符串(使用 C# Web 服务中的 JSON.NET JToken 类),我通过 AJAX Get 请求将其传递给客户端。
我希望能够以 ES5 样式定义某些属性:prop: { value: '1', enumerable: false, writable: true }
,但有一个障碍。
首先,JSON.parse() 简单地将“可枚举”和“可写”属性解释为通用 JavaScript 对象上的通用属性。这可能是预期的和可取的行为,但是对于新的 ES5 属性属性,“解析”JSON 的可比方法是什么?
其次, Object.create() 有效,但它有一些限制。例如,
//Native works
var prop = Object.create(Object.prototype, { prop: { value: '1', enumerable: false, writable: true } });
//prop === "1"
//Parse works
var prop = Object.create(Object.prototype, JSON.parse({ "prop": { "value": '1', "enumerable": false, "writable": true } });
//prop === "1"
//Parse fails
var prop = Object.create(Object.prototype, JSON.parse({ "prop": { "value": '1', "enumerable": "false", "writable": "true" } });
// prop === JSON.parse({ "prop": { "value": '1', "enumerable": "false", "writable": "true" } })
当然,这里的问题是"true" !== true
,它指示Object.create()
返回与 相同的对象JSON.parse()
。此外,无论是因为对特定道具属性的真实评估,还是因为我试图创建特别大的对象,Object.create()
似乎都非常脆弱。
有没有更好的方法以尊重 ES5 prop 属性的方式“解析”这些对象?