2012-02-21 129 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

这可能是一个范围问题 - 使用'var'关键字,因此变量('this.Collections'等)仅范围内的存在的函数(对象),而不是保存到全局范围中。 – 2012-02-21 10:30:50

+1

键将被视为字符串。如果你使用与键不同的数据类型,它将被转换为字符串。默认的字符串表示形式是'[object Object]',因此您可以考虑使用另一个键作为键(例如,使用您自己的对象序列化)。 – 2012-02-21 10:30:58

+0

[Hash /关联数组使用多个对象作为关键字]的可能重复(http://stackoverflow.com/questions/6983436/hash-associative-array-using-several-objects-as-key) – 2012-02-21 10:33:39

回答

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; 
}(); 
相关问题