私のクライアント/サーバー 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 属性を尊重する方法でこれらのオブジェクトを「解析」するより良い方法はありますか?