【发布时间】:2014-08-31 01:21:24
【问题描述】:
我有一个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 )
【问题讨论】:
-
有可能,是的,但你为什么不直接使用闭包呢?
-
modules : []需要进入构造函数,否则it would be shared amongst all instances!!! -
@Bergi - 完全错过了谢谢!
-
使用闭包是个好主意——我什至没有想到。
-
@Bergi 谢谢!我在想象更复杂的事情,却完全忽略了摆在我面前的简单解决方案。