2012-05-31 48 views
0

我使用的CoffeeScript创建下面的类:当我创建类的新实例,并添加一些东西到阵列一个JavaScript类的数组是静态

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

'User.prototype.room = new Array()',这里的'prototype'关键字表示所有'User'对象共享这个字段。 –

回答

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)设置传递的值作为对象(未原型)
2)上userIdrooms给出了每个属性的默认值,如果不设置它们。

注意我甚至不需要在构造函数中做其他任何事情。绝对遵循该链接,以便您可以看到本示例创建的JavaScript。