对象Javascript的数组访问

时间:2014-03-24 20:43:49

标签: javascript arrays coffeescript

在咖啡脚本中,我有这个小代码片段。

class Collection

  construct:(@collection=[])

现在我想访问该对象,就好像它是一个数组但我想在我这样做时获取集合变量。在其他语言中,我将实现某种类型的ArrayAccess并编写下一个当前等方法

obj= new Collection([1,2,3])

obj[0] # this should equal 1 

我怎样才能在javascript或coffeescript中执行此操作

1 个答案:

答案 0 :(得分:1)

那是不可能的。你需要某种proxy。没有“ArrayAccess”声明功能,因为括号表示法只是Collection实例上的属性访问权限(例如obj["collection"])。

相反,你可以:

  • 实现一个getter函数,比如

    class Collection
      construct:(@collection=[])
      at: (i) ->
        @collection[i]
    
    obj.at 0 # 1
    
  • 使用Collection对象本身作为元素的持有者(例如jQuery就是这样)。但是,您放弃了本机阵列功能。您甚至可以subclass Array to some extent.length不会自动更新)。

    class Collection
      constructor: (col = []) ->
        @length = 0
        for el in col
          Array::push.call(@, el)
    
    obj[0] # 1