我有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 )
答案 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
@