【发布时间】:2011-11-19 00:06:53
【问题描述】:
在下面的 CoffeeScript 程序中,我创建了一个 Array 的子类,它在其构造函数中设置了两个位置:
class SetPositionsArray extends Array
constructor: (x,y) ->
@[0] = x
@[1] = y
myLength: ->
@length
sp_array = new SetPositionsArray 1, 2
console.log "sp_array: "
console.log sp_array
console.log "sp_array[0]: "
console.log sp_array[0]
console.log "sp_array[1]: "
console.log sp_array[1]
console.log "sp_array.length: "
console.log sp_array.length
console.log "sp_array.myLength(): "
console.log sp_array.myLength()
我希望这段代码能改变sp_array 的length 属性,因为它有效地设置了它的位置。但是,我得到的输出是:
$ coffee sp.coffee
sp_array:
[ 1, 2 ]
sp_array[0]:
1
sp_array[1]:
2
sp_array.length:
0
sp_array.myLength():
0
即长度为0。
然后,我创建了另一个类,它在实例中推送值而不是设置它们:
class PushValuesArray extends Array
constructor: (x,y) ->
@push x
@push y
myLength: ->
@length
pv_array = new PushValuesArray 1, 2
console.log "pv_array: "
console.log pv_array
console.log "pv_array[0]: "
console.log pv_array[0]
console.log "pv_array[1]: "
console.log pv_array[1]
console.log "pv_array.length: "
console.log pv_array.length
console.log "pv_array.myLength(): "
console.log pv_array.myLength()
在这种情况下,我得到了预期的结果,除了数组中有一个 实际 length 属性(虽然我想这将是一些内部细节):
$ coffee pv.coffee
pv_array:
[ 1, 2, length: 2 ]
pv_array[0]:
1
pv_array[1]:
2
pv_array.length:
2
pv_array.myLength():
2
那么,为什么设置数组中的位置不会改变它的长度呢?
这个问题与this one 相关,我为此发布了this answer。
【问题讨论】:
标签: javascript arrays coffeescript