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

残念ながら、それに魔法のようにアクセスするための構文はありません...のようなものでさえ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)
于 2013-01-29T19:03:14.243 に答える
1

いいえ、これには特別な構文はありません。ChildItemaと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 に答える