Node.js 类问题,或者我做错了什么?

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

因此,下面所写的内容完全正确。谢谢你们。

最佳答案

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

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

解决办法:

永远不要将可变状态放入原型(prototype)中。

关于Node.js 类问题,或者我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16986093/

相关文章:

javascript - 如何在 GraphQL 中使用变异方法在模型中创建关系?

node.js - 比较 Cloud Functions 中的两个 Firestore 时间戳

windows - 如果您在 Windows 上进行开发,那么将 CoffeeScript 与 Django 结合使用的最佳方式是什么?

javascript - 在 Rails 中创建/编辑帖子时生成帖子的实时预览

javascript - 如何将页面加载后计算出的数据发送到 MongoDB?

JavaScript ES6 循环需要引用

javascript - 在 nodejs Passport.js 中禁用 session

coffeescript - 如何在 CoffeeScript 中发表评论? "/* this */"不起作用

ruby-on-rails-3 - 使用 Jasmine 和 Rails 3.1 测试 Coffeescript

javascript - 非全局 CoffeeScript 和 Assets 管道