在 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 数组功能。你甚至可能 subclassArray
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/