1

私はCoffeeScriptで簡単なサブクラス化をしようとしています

class List
  items: []
  add: (n) ->
    @items.push(n)
    console.log "list now has: #{@}"

  toString: ->
    @items.join(', ')

class Foo extends List
  constructor: ->
    console.log "new list created"
    console.log "current items: #{@}"

問題:

a = new Foo() # []
a.add(1)      # [1]
a.add(2)      # [2]

b = new Foo() # [1,2]
# why is b initializing with A's items?

b.add(5)      # [1,2,5]
# b is just adding to A's list :(​

ただし、クラスのインスタンスは、プロパティFooの独自のコピーを保持していません。items

期待される結果:

b = new Foo()   # []
b.add(5)        # [5]

jsフィドル

便宜上提供されるコード スニペット

4

1 に答える 1

4

リストのすべてのインスタンスと共有されるリストのプロトタイプの配列を設定しています。

インスタンスごとに個別の配列を初期化するには、コンストラクターで配列を初期化する必要があります。

試す

class List
  constructor: ->
    @items = []
于 2012-09-10T16:29:29.943 に答える