class ChildItem
constructor : ->
@activate()
activate : ->
if parent.ready #this line will fail
console.log 'activate!'
class ParentItem
constructor : ->
@ready = true;
@child = new ChildItem()
item = new ParentItem()
如何从item.ready
访问item.child.activate
?必须有这样的语法!
答案 0 :(得分:1)
不,没有特殊的语法。如果您需要ChildItem
和ParentItem
之间的关系,那么您必须自己联系它;例如:
class ChildItem
constructor: (@parent) ->
@activate()
activate: ->
console.log('activate') if(@parent.ready)
class ParentItem
constructor: ->
@ready = true
@child = new ChildItem(@)
item = new ParentItem()
答案 1 :(得分:1)
不幸的是,没有语法可以神奇地访问...即使像arguments.caller
这样的东西也无济于事。但是,有几种方法可以做到,不确定您更喜欢哪种方式:
1)传递ready参数(或者你也可以传递整个父级)。
class ChildItem
constructor: (ready) ->
@activate ready
activate: (ready) ->
if ready
console.log 'activate!'
class ParentItem
constructor : ->
@ready = true
@child = new ChildItem(@ready)
item = new ParentItem()
2)或者你可以使用extends
来使ChildItem访问ParentItem的所有属性和功能:
class ParentItem
constructor : (children) ->
@ready = true
@childItems = (new ChildItem() for child in [0...children])
class ChildItem extends ParentItem
constructor: ->
super()
@activate()
activate: ->
if @ready
console.log 'activate!'
item = new ParentItem(1)