将具有args的函数推入数组以便稍后调用

时间:2014-07-09 20:44:06

标签: javascript coffeescript

我有add方法将function推送到array,以便稍后调出。

class FRAME.Renderer
  camera   : FRAME.__Camera
  renderer : FRAME.__Renderer 
  scene    : FRAME.__Scene 


  constructor : ( lookAt )->
    @lookAt  = lookAt or false
    @modules = []


  add : ( module )->
    self = this 

    if typeof( module ) is 'function' then @modules.push( module )
    else throw new Error( 'add() only accepts a Function' )

    this 

  build :->
    self = this 
    len  = @modules.length  

    setup =( i )->
        temp = self.modules[i].bind( self )
        temp()

    if len isnt 0 then for i in [0..len-1] then setup( i )


makeCircle =->
  # Circle stuff

makeSquare =->
  # Square stuff

renderer = new FRAME.Renderer()
renderer.add( makeCircle )
renderer.add( makeSquare )

renderer.render()

这没有任何问题。如何或有可能进行此设置并使用包含参数的函数调用add(我应该使用object/array combo [{}]代替modules吗?

makeSquare = ( options )->
  # Square stuff

renderer.add( makeSquare, options )

1 个答案:

答案 0 :(得分:0)

是的,这是可能的,而实际上很容易使用coffeescript:

add: (module, args...) ->
  if typeof module is 'function'
    @modules.push {fn: module, args: args}
  else
    throw new Error 'add() only accepts a Function'
  @
build: ->
  for {fn, args} in @modules
    fn(args...) # or
    fn.apply @, args # if you want to bind them
  @