我有这样的基类:
class Base
loginForm: {}
constructor: (@data) ->
@username = @data.username
@password = @data.password
log: ->
console.log @loginForm
和子类,它应该是这样的:
class Child extends Base
loginForm:
accountname: @username.split('/')[0]
username: @username.split('/')[1]
password: @password
child = new Child username: 1, password: 2
显然,如果我们child.log()
,我们会看到
Child.username is undefined
所以,问题是我如何使用属性,在其他属性定义(或类属性中的类参数)中的构造函数内设置?
上面的代码是我所拥有的简化版本,但它完全显示了我需要实现的内容(请不要建议我为基类构造函数中的每个@username.split('/')
创建单独的属性)。
这是相应的jsFiddle
我知道我可以做类似
的事情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
但我不愿意(我不喜欢它的样子)。
答案 0 :(得分:0)
您必须使用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
当您创建Child
的实例时,传递数据以便父Base
在其构造函数中获取它。