这段代码
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);
因此,下面所写的内容完全正确。谢谢你们。
最佳答案
bar
是属于 Foo.prototype
的单个数组实例。
new Foo().bar
将始终引用此相同数组实例。
因此,通过一个 Foo
实例执行的任何突变也将通过任何其他 Foo
实例可见。
解决办法:
永远不要将可变状态放入原型(prototype)中。
关于Node.js 类问题,或者我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16986093/