CoffeeScript类成员

时间:2011-12-02 11:06:03

标签: coffeescript

我是CoffeeScript的新手(而且对JS也很缺乏经验;如果这很天真,那就很抱歉)我试图创建一个类如下:

class Test
   a: []

   make: ->
       @a.push ['A', 'B', 'C']

   getdata: ->
       output = ""
       for i in @a
          output += i
       output

b = new Test
b.make()

alert(b.getdata())


c = new Test
c.make()

alert(c.getdata())

我得到的输出是:     “A,B,C”     “A,B,C,A,B,C”

尽管创建了一个新的'Test'实例;数组被追加并且不被清除。我在这做错了什么?我是否错误地初始化了成员变量?

1 个答案:

答案 0 :(得分:23)

定义a: []时,您将在类原型上创建单个数组对象。您创建的类的每个实例都将具有相同的数组对象。每当一个实例修改该值时,所有其他实例都可以看到更改。

请注意,只有在修改值时才会出现这种情况,例如通过向数组添加项目。如果你替换该值,例如通过分配一个新数组,这只会影响当前实例。

当你想要一个基于每个实例初始化的属性时,你应该在实际创建实例时在constructor中定义它:

class Test
   constructor: ->
       @a = []
       @a.push ['A', 'B', 'C']

   getdata: ->
       output = ""
       for i in @a
          output += i
       output

b = new Test

alert(b.getdata())


c = new Test

alert(c.getdata())

Try this out你会发现它的效果与你想要的一样。

相关问题