此代码
class Foo
bar: []
test = new Foo()
test.bar.push('b')
test2 = new Foo()
console.log test2.bar
将产生输出['b']
。怎么可能呢?
这就是CoffeScript生成的内容:
// Generated by CoffeeScript 1.4.0
var Test, test, test2;
Test = (function() {
function Test() {}
Test.prototype.a = [];
return Test;
})();
test = new Test();
test.a.push('b');
test2 = new Test();
console.log(test2.a);
因此,下面写的是完全正确的。谢谢你们。
答案 0 :(得分:3)
bar
是属于Foo.prototype
的单个数组实例
new Foo().bar
将始终引用此相同的数组实例。
因此,通过一个Foo
实例执行的任何突变也将在任何其他Foo
实例中可见。
解决方案:
答案 1 :(得分:0)
如果您希望使用Foo
创建this.bar = []
,请在构造函数中执行此操作:
class Foo
constructor: -> @bar = []