如何从coffeescript中的类属性访问类参数?

时间:2015-10-28 17:24:23

标签: javascript coffeescript

我有这样的基类:

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

但我不愿意(我不喜欢它的样子)。

1 个答案:

答案 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在其构造函数中获取它。