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