Node.js类问题,还是我做错了什么?

时间:2013-06-07 14:06:03

标签: node.js coffeescript

此代码

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);

因此,下面写的是完全正确的。谢谢你们。

2 个答案:

答案 0 :(得分:3)

bar是属于Foo.prototype的单个数组实例 new Foo().bar将始终引用此相同的数组实例。

因此,通过一个Foo实例执行的任何突变也将在任何其他Foo实例中可见。

解决方案:

永远不要将可变状态放在原型中。

答案 1 :(得分:0)

如果您希望使用Foo创建this.bar = [],请在构造函数中执行此操作:

class Foo
  constructor: -> @bar = []