2012-02-21 12 views
1

JavaScriptの辞書機能を使うには?JavaScriptでオブジェクトを使用してキーで値を取得して取得する方法は?

ルックこのquestionで指定された方法が取り組んでいるが、私はこのようなキーとして機能インスタンスを設定しています:

Scale = function() 
{ 
    this.Collections = {}; 
    this.IndexTracker = {}; 
    this.UpdateIndex = function() 
    { 
     var index = 0; 
     for (var i = 0; i < this.Collections.length; i++) 
     { 
      this.SetIndex(this.Collections[i], index++); 
     } 
    } 
    this.SetIndex = function (obj, value) 
    { 
     this.IndexTracker[obj] = value; 
    } 
    this.GetIndex = function (obj, value) 
    { 
     return this.IndexTracker[obj]; 
    } 
} 

this.Collectionsは、いくつかの関数インスタンスを保持します。

ここでの問題は、関数インスタンスがthis.Collectionsの次の関数インスタンスによって上書きされることです。 Collectionsの長さは常に1です。これを解決するには?

enter image description here

+0

それはスコープの問題であるかもしれない - 変数(ETC 'this.Collections'は、)のみの範囲内に存在するように、' var'キーワードを使用グローバルスコープに保存されるのではなく、関数(オブジェクト)の –

+1

キーは文字列として扱われます。キーと異なるデータ型の場合は、文字列に変換されます。デフォルトの文字列表現は '[object Object]'ですので、キーとして使用する他のものについて考えることができます(独自のオブジェクトの直列化など)。 –

+0

[複数のオブジェクトをキーとして使用するハッシュ/連想配列]の複製が可能です(http://stackoverflow.com/questions/6983436/hash-associative-array-using-several-objects-as-key) –

答えて

1

これは一例です:

var Scale = function() { 
    var _Collections = {}, 
    _IndexTracker = {}, 
    ret = function() { 
     function UpdateIndex() { 
      var index = 0,i,l; 
      for (i = 0,l=_Collections.length; i < l; i++) { 
       this.SetIndex(_Collections[i], index++); 
      } 
     } 
     function SetIndex(obj, value) { 
      _IndexTracker[obj] = value; 
     } 
     function GetIndex(obj, value) { 
      return _IndexTracker[obj]; 
     } 
     return { 
      UpdateIndex : UpdateIndex, 
      SetIndex : SetIndex, 
      GetIndex : GetIndex 
     }; 
    }; 
    return ret; 
}(); 
関連する問題