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语言中,如果父构造函数为子构造函数需要的实例设置属性,则子构造函数应该调用父构造函数。。。