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

How to access class parameter from class property in coffeescript?

本文关键字:属性 访问 参数 coffeescript      更新时间:2023-09-26

我有这样的基类:

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

但我很乐意不去(我不喜欢它的样子)。

您必须使用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在其构造函数中获取它。