JavaScript中对象的数组访问

3
在 CoffeeScript 中,我有这个小代码片段。
class Collection

  construct:(@collection=[])

现在我想以数组的方式访问该对象,但是当我这样做时,我想获取集合变量。在其他语言中,我会实现某种类型的ArrayAccess并编写next、current等方法。

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

obj[0] # this should equal 1 

我应该如何使用JavaScript或CoffeeScript来实现这一点?
1个回答

1
那是不可能的。你需要某种代理。没有“ArrayAccess”声明功能,因为方括号表示法只是您的Collection实例上的属性访问(例如obj["collection"])。
相反,您可以:
  • 实现一个getter函数,例如

    class Collection
      construct:(@collection=[])
      at: (i) ->
        @collection[i]
    
    obj.at 0 # 1
    
  • 使用Collection对象本身作为元素的容器(例如jQuery所做的)。但是您会失去原生数组的特性。您甚至可以在某种程度上子类化Array.length不会自动更新)。

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

at 是一个不错的主意,也许可以与 foreach 循环一起使用。 - Lpc_dark
1
@Lpc_dark: 请使用eachallevery的常见同义词。 - Bergi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接