访问coffeescript中包含的类的父类

时间:2013-01-29 18:30:56

标签: oop coffeescript

 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?必须有这样的语法!

2 个答案:

答案 0 :(得分:1)

不,没有特殊的语法。如果您需要ChildItemParentItem之间的关系,那么您必须自己联系它;例如:

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)