带有数组的javascript类是静态的

时间:2012-05-31 01:45:02

标签: javascript coffeescript

我正在使用coffeescript创建以下类:

class User
  userId: 0
  rooms: new Array()

当我创建类的新实例并向数组添加内容时,任何新实例也包含相同的数组。生成的javascript是:

  var User;

  User = (function() {

    User.name = 'User';

    function User() {}

    User.prototype.userId = 0;

    User.prototype.rooms = new Array();

    return User;

  })();

每次实例化类时,如何设计具有新空数组的类?

1 个答案:

答案 0 :(得分:3)

您希望userIdrooms位于this上,而不是原型上,否则所有实例都会共享它们。

class User
  constructor: (@userId = 0, @rooms = []) ->

u = new User 1, [1,2]
u2 = new User 2, [3,4]

alert "#{ u.userId } #{ u.rooms } #{u2.userId} #{u2.rooms}"

Try it here

@仅表示this.

构造函数行做了很多。它定义了一个构造函数

1)将传递的值设置为userIdrooms对象(不是原型)
2)如果没有提供,则为每个属性提供默认值。

注意我甚至不必在构造函数中做任何其他事情。绝对按照链接,这样你就可以看到这个例子创建的javascript。