CoffeeScript类参数集语法

CoffeeScript类参数集语法,coffeescript,Coffeescript,我目前正在研究CoffeeScript,我有一个问题,那就是如何以智能的方式编写下面的代码 class TestClass constructor : (name) -> @name = name if name? name : "Jack" sayHi : -> console.log "Hi #{@name}" 我知道构造函数:(@name)->可以将参数设置为实例属性,但是,如果我想在缺少参数时使用class属性,那么它

我目前正在研究CoffeeScript,我有一个问题,那就是如何以智能的方式编写下面的代码

class TestClass
    constructor : (name) ->
        @name = name if name?
    name : "Jack"
    sayHi : ->
        console.log "Hi #{@name}"
我知道
构造函数:(@name)->
可以将参数设置为实例属性,但是,如果我想在缺少参数时使用class属性,那么它就不起作用了。
构造函数:(@name)->
即使参数为null,也要声明this.name

class TestClass
    constructor : (@name) ->
    name : "Jack"
    sayHi : ->
        console.log "Hi #{@name}"

foo = new TestClass()
foo.sayHi()
# "hi undefined" because foo.name exists with null value.
当然,我已经尝试了
构造函数:(@name?)->
,但这会触发语法错误

有没有更好的方法,或者我必须编写代码
@name=name if name?
,这是目前为止最好的方法

感谢您的帮助

如何使用for
构造函数
参数

class TestClass
  constructor: (@name = "Jack") ->
制作:

{ name: 'Jack' }
{ name: 'Paul' }

这IMHO,不要在原型中使用默认值。那么它就不再是类属性了。这意味着当我想更改
name
的值时,我必须更改所有实例属性,并且无法确保实例属性的
name
是由默认值生成的,或者是根据参数设置的。(
newtestclass(“Jack”)
新建TestClass()
)@suish我认为,您应该坚持使用当前的解决方案。不过,我看不出更改现有类的原型的好处。原型突变通常会导致错误。我不是问如何设置实例属性的默认值。就像我说的,我希望它是类属性而不是实例属性
constructor:(name)->@name=name如果name?
并在生成的实例没有name属性且
constructor:(@name=\u name)时使用TestClass.name->
如果构造函数没有得到参数,则设置默认值是完全不同的事情,因为当您在声明
tc
后既不删除tc.name也不更改TestClass的name属性时,它们的工作方式不同。所以您希望能够执行
t=newtestclass;TestClass::name='pancakes'
和have
t.name=='pancakes'
{ name: 'Jack' }
{ name: 'Paul' }