2

在我的客户端/服务器 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 属性的方式“解析”这些对象?

4

0 回答 0