【问题标题】:Array Access of Object Javascript对象Javascript的数组访问
【发布时间】:2014-05-02 10:43:07
【问题描述】:

在咖啡脚本中,我有这个小代码 sn-p。

class Collection

  construct:(@collection=[])

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

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

obj[0] # this should equal 1 

我怎样才能在javascript或coffeescript中做到这一点

【问题讨论】:

    标签: javascript arrays coffeescript


    【解决方案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
      

    【讨论】:

    • at 是个好主意。可能再加上一个 foreach 循环。
    • @Lpc_dark: eachallevery 的常用同义词
    猜你喜欢
    • 2018-05-27
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 2013-12-02
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多