クロスブラウザで動作するJavaScriptオブジェクトに「隠された」列挙不可能なプロパティを追加する方法はありますか?
最近のほとんどのブラウザーでは、次のことができます。
Object.defineProperty(obj, '__id__', { enumerable: false, value: id++ });
を持たない一部の古い非 IE ブラウザでは、ハックObject.defineProperty
を使用できます。__proto__
ただし、これらはいずれも IE では機能しません。IE8 でこれを達成する方法はありますか (IE7 もあればクールですが、必須ではありません)。
主な目標は、トラッカー プロパティを任意の JavaScript{}
オブジェクトに追加できるようにすることですが、 を呼び出したときにJSON.stringify(obj)
プロパティに含まれないようにすることです。カスタムの JSON 置換関数を追加できる (基本的にはJSON.stringify
機能を拡張する) ことができることはわかっていますが、追跡された JavaScript オブジェクトを JSON にシリアル化するたびに、それを追加することを知っている/覚えておく必要があるため、私はそれが好きではありません。かなり非現実的な置換機能。
これを達成する方法はありますか?