【发布时间】:2012-02-19 13:45:49
【问题描述】:
我有以下代码在coffeescript中定义了一个迭代器原型(扩展了数组原型):
App.Utils.Iterator = do ->
Iterator = ->
Array.apply(this,arguments)
### this.push(i) for i in arguments : works but not good practice
iter = 0
@reset = ->
iter = 0
@getIndex = ->
iter
@getValue= ->
this[iter]
@next= ->
this[++iter] if iter < this.length-1
@previous= ->
this[--iter] if iter>0
@hasNext= ->
return if this[iter+1] then true else return false
@hasPrevious= ->
return if this[iter-1]then true else return false
return this
Iterator.prototype = new Array()
Iterator.prototype.constructor = Array
return Iterator
一切正常,但是我想像数组一样实例化迭代器:
iterator = new App.Utils.Iterator(1,2,3,4)
在控制台返回 []
如何使它像普通数组一样初始化我的迭代器( new Array(1,2,3,4) 返回 [1,2,3,4] )而不在构造函数中推送参数(指令已在我的代码中评论)
谢谢
【问题讨论】:
-
我仍在尝试理解这段代码。我还无能为力,但是您是否打算在每次调用构造函数时重新定义所有原型方法?这看起来像正在发生的事情。啊,我明白了,你这样做是为了在
iter附近关闭。 -
@Hemlock :是的,我希望 iter 是“私有的”,这就是我这样做的原因。
标签: javascript iterator coffeescript