0
 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?必须有一个语法!

4

2 回答 2

1

不,这没有特殊的语法。如果您需要 aChildItem和 a之间的关系,ParentItem那么您必须自己连接它;例如:

class ChildItem
    constructor: (@parent) ->
        @activate()
    activate: ->
        console.log('activate') if(@parent.ready)

class ParentItem
    constructor: ->
        @ready = true
        @child = new ChildItem(@)

item = new ParentItem()
于 2013-01-29T19:01:30.113 回答
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) 或者您可以使用extendswhich 可以让 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)
于 2013-01-29T19:03:14.243 回答