带有数组的 JavaScript 类是静态的

A javascript class with an array is static

本文关键字:静态 JavaScript 数组      更新时间:2023-09-26

我正在使用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;
  })();

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

您希望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}"

在这里试试。

@只是意味着this.

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

1) 将传递的值设置为对象(而不是原型
)上的userIdrooms2) 如果未提供每个属性,则为每个属性提供默认值。

注意 我什至不必在构造函数中执行任何其他操作。 一定要点击链接,这样你就可以看到这个例子创建的javascript。