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

Javascript 如何从coffeescript中的类属性访问类参数?,javascript,coffeescript,Javascript,Coffeescript,我有这样的基类: 类基 登录信息:{} 构造函数:(@data)-> @username=@data.username @password=@data.password 日志:-> console.log@loginForm 还有子类,应该是这样的: class Child extends Base loginForm: accountname: @username.split('/')[0] username: @username.split('/')[1] p

我有这样的基类:

类基
登录信息:{}
构造函数:(@data)->
@username=@data.username
@password=@data.password
日志:->
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('/')
中的每一个创建单独的属性)

这里是对应的

我知道我可以做像这样的事情

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

您必须使用
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
在它的构造函数中得到它。

事实上,我的
init()
示例已经起作用了,但正如我提到的,我不喜欢它的外观。。。我不知道该说什么。。。如果不以某种方式设置父对象的属性,它们将始终处于未定义状态。在大多数OOP语言中,如果父构造函数将属性设置为子构造函数所需的实例,则子构造函数应该调用父构造函数…实际上,我的
init()
示例已经运行,但正如我所提到的,我不喜欢它的外观。。。我不知道该说什么。。。如果不以某种方式设置父对象的属性,它们将始终处于未定义状态。在大多数OOP语言中,如果父构造函数为子构造函数需要的实例设置属性,则子构造函数应该调用父构造函数。。。