私の仕事
私のJavaScriptコードでは、オブジェクトを使用してキーを値に「マップ」しているので、後で特定の値を介して直接アクセスできます。例えば:
var helloMap = {};
helloMap.de = "Hallo";
helloMap["en"] = "Hello";
helloMap.es = "Hola";
そこで、2つの利用可能な表記オブジェクトスタイルと配列スタイルを使用して、ソースコードでマップオブジェクトを段階的に構築します。
後でhelloMap["de"]
、たとえば、追加した値にアクセスできます。したがって、オブジェクトに属性が設定されている順序を気にする必要がなければ、これで問題ありません。
オブジェクトのプロパティを今すぐ繰り返したい場合は、追加された順序でオブジェクトを繰り返すことを保証する方法はありません。
注:ラッパーオブジェクトを使用して、そこに配列を保持し、そのメソッドを使用して値を追加することはできません。次のようになります。
var HelloMap = function(){
this.myMap = [];
this.addProperty = function(key, value){
this.myMap.push({key: key, value: value});
}
}
または同様のものは私にはうまくいきません。したがって、ソリューションは、オブジェクトを使用するプログラマーに対して完全に透過的である必要があります。
つまり、必要なオブジェクトは、追加されたプロパティの順序を維持する空のオブジェクトになります。このようなことは次のようになります。
var helloMap = {};
helloMap = getOrderAwareObject(helloMap);
helloMap.xy = "foo"
フォームのそれ以降のすべての割り当てがhelloMap["yz"] = "bar"
オブジェクトで「順番に」追跡されるように、
可能な解決策
アンダースコアやjQueryでそのような特別なオブジェクトを提供するソリューションが見つからなかったため、JavaScriptオブジェクトのプロパティのゲッターとセッターを定義する可能性に出くわしました。ECMAScript5標準にObject.defineProperty
依存できるため、それを使用できます。
これの問題は、実際に設定する前に、オブジェクトに設定できるすべての可能なプロパティを知っている必要があることです。あなたがそれを定義するならば、あなたはそれに名前を付けなければならないので。
私が探しているのは、プロパティにゲッターとセッターが定義されていない場合にオブジェクトに適用されるデフォルトのゲッターとデフォルトのセッターのようなものです。したがって、ソートされたマップをオブジェクトインターフェイスの背後に隠すことができます。
- あなたが知っているフレームワークでこれに対する解決策はすでにありますか?
- 「デフォルトのゲッター/セッター」のようなメカニズムはありますか?