[英]How to access class parameter from class property in coffeescript?
I have such base class: 我有这样的基类:
class Base
loginForm: {}
constructor: (@data) ->
@username = @data.username
@password = @data.password
log: ->
console.log @loginForm
and the child class, which should look like this: 和子类,应如下所示:
class Child extends Base
loginForm:
accountname: @username.split('/')[0]
username: @username.split('/')[1]
password: @password
child = new Child username: 1, password: 2
Obviously, if we do child.log()
we'll see 显然,如果我们执行
child.log()
我们将看到
Child.username is undefined
So, the question is how can I use properties, that are set inside constructor in other properties definition (or class parameter inside class property)? 因此, 问题是我如何使用在其他属性定义(或类属性中的类参数)的构造函数中设置的属性?
The code above is simplified version of what I have, but it completely shows what I need to achieve (please, do not suggest me to create separate properties for each of @username.split('/')
in base class constructor). 上面的代码是我拥有的代码的简化版本,但它完全显示了我需要实现的功能(请不要建议我为基类构造函数中的每个
@username.split('/')
创建单独的属性)。
Here is corresponding jsFiddle 这是对应的jsFiddle
I know I can do something like 我知道我可以做类似的事情
class Base
loginForm: {}
constructor: (@data) ->
@username = @data.username
@password = @data.password
@init()
init: ->
class Child extends Base
init: ->
@loginForm =
accountname: @username.split('/')[0]
username: @username.split('/')[1]
password: @password
but I would love not to (I don't like how it looks). 但我不愿意(我不喜欢它的外观)。
You have to call the parent constructor by using super
: 您必须使用
super
来调用父构造函数:
class Base
loginForm: {}
constructor: (@data) ->
@username = @data.username
@password = @data.password
log: ->
console.log @loginForm
class Child extends Base
constructor: (@data) ->
super(@data)
init: ->
@loginForm =
accountname: @username.split('/')[0]
username: @username.split('/')[1]
password: @password
And when you create an instance of Child
, pass the data so that the parent Base
get's it in it's constructor. 当您创建
Child
的实例时,传递数据,以便父Base
在其构造函数中得到它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.