带有数组的javascript类是静态的
我正在使用coffeescript创建以下类:带有数组的javascript类是静态的,javascript,coffeescript,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.
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;
})();
如何设计每次实例化类时都有一个新的空数组的类?您希望
userId
和rooms
在这个上,而不是在原型上,否则所有实例都将共享它们
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}"
@
的意思就是这个。
构造函数行做了很多工作。它定义了一个构造函数
1) 在对象(不是原型)上将传递的值设置为userId
和rooms
。
2) 如果未提供每个属性,则为其提供默认值
注意,我甚至不需要在构造函数中执行任何其他操作。一定要遵循链接,以便查看此示例创建的javascript。您希望userId
和rooms
在上,而不是在原型上,否则所有实例都将共享它们
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}"
@
的意思就是这个。
构造函数行做了很多工作。它定义了一个构造函数
1) 在对象(不是原型)上将传递的值设置为userId
和rooms
。
2) 如果未提供每个属性,则为其提供默认值
注意,我甚至不需要在构造函数中执行任何其他操作。一定要遵循链接,这样您就可以看到此示例创建的javascript。User.prototype.room=new Array()
,这里的prototype
关键字意味着所有User
对象都共享此字段。User.prototype.room=new Array()
,此处的prototype
关键字意味着所有User
对象共享此字段。