我正在使用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;
})();
每次实例化类时,如何设计具有新空数组的类?
答案 0 :(得分:3)
您希望userId
和rooms
位于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)将传递的值设置为userId
和rooms
对象(不是原型)
2)如果没有提供,则为每个属性提供默认值。
注意我甚至不必在构造函数中做任何其他事情。绝对按照链接,这样你就可以看到这个例子创建的javascript。