2

私のクライアント/サーバー Web アプリでは、AJAX Get 要求を介してクライアントに渡す大きな JSON 文字列 (C# Web サービスで JSON.NET JToken クラスを使用) を生成しています。

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指示するです。さらに、特定の prop 属性の真実の評価のため、または特に大きなオブジェクトを作成しようとしているため、非常に壊れやすいようです。Object.create()JSON.parse()Object.create()

ES5 prop 属性を尊重する方法でこれらのオブジェクトを「解析」するより良い方法はありますか?

4

0 に答える 0