我是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'实例;数组被追加并且不被清除。我在这做错了什么?我是否错误地初始化了成员变量?
答案 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你会发现它的效果与你想要的一样。