javascript - 对象 Javascript 的数组访问

标签 javascript arrays coffeescript

在 CoffeeScript 中我有这个小代码片段。

class Collection

  construct:(@collection=[])

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

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

obj[0] # this should equal 1 

我如何在 javascript 或 coffeescript 中执行此操作

最佳答案

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

相反,您可以:

  • 实现一个getter函数,比如

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

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

关于javascript - 对象 Javascript 的数组访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22620192/

相关文章:

javascript - 在 DOMReady 触发之前与 DOM 交互

javascript - 自动完成 JQuery UI 不工作?

带 while 循环的 C++ 数组

javascript - 使用 javascript 从数组中打印 x 个对象

Coffeescript:如何将字符串转换为数字?

javascript - 如何根据其动态值选择列表

javascript - 在 Div 背景中加载图像时设置超时

java - 如何在 Spring Boot 中从 JSON 数组中删除元素?

javascript - 使用 Promise.all 等待所有回调完成

coffeescript - 在Coffeescript中中断/继续嵌套嵌套循环