在咖啡脚本中,我有这个小代码片段。
class Collection
construct:(@collection=[])
现在我想访问该对象,就好像它是一个数组但我想在我这样做时获取集合变量。在其他语言中,我将实现某种类型的ArrayAccess并编写下一个当前等方法
obj= new Collection([1,2,3])
obj[0] # this should equal 1
我怎样才能在javascript或coffeescript中执行此操作
答案 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