coffeescript中的嵌套方法

时间:2015-01-27 09:08:53

标签: javascript methods binding coffeescript prototype

作为following example,我想将嵌套方法放入coffescript类(或本机js)。

class Child
  constructor: (@id) ->
    console.log "new child #{@id}"
  animations:
    start: ->
      console.log @, "#{@id} start animation"
    custom:
      rotate: ->
        console.log @, "#{@id} custom rotate animation"

class Parent
  constructor: ->
    @_childs = []
    _.each [1..10], (index) =>
      @_childs.push new Child(index)
  startAll: ->
    _.each @_childs, (child) ->
      child.animations.start()


parent = new Parent()
parent.startAll()

我发现的唯一方法是

  1. 克隆我的嵌套方法对象
  2. 将每个嵌套方法绑定到当前对象
  3. 我宁愿将它保存到我的原型对象中,以避免在创建新对象时重新创建所有嵌套方法。 我找到了答案here,但我没有找到一个很好的方法来处理它。 我也找到answer,这是唯一的方法吗?

    感谢您的帮助

1 个答案:

答案 0 :(得分:1)

如果您使用函数而不是对象,则可以跟踪this

class Child
  constructor: (@id) ->
    console.log "new child #{@id}"
  animations: ->
    start: =>
      console.log @, "#{@id} start animation"
    custom: ->
      rotate: =>
        console.log @, "#{@id} custom rotate animation"

然后只需调用该函数,它将返回一个对象。

child.animations().start()