我想改进一个小框架,因此我想摆脱对eval
.
让代码说话:
# irf.coffee (The Framework)
# Classes which are appended to the namespace 'IRF'
classes = [
"Background"
"BoundingBox"
# ...
]
# Namespace where to attach classes
@IRF = {}
# TODO: Get rid of eval(c)
for c in classes
@IRF[c] = eval(c)
我只想IRF
“污染”全局命名空间,这样我就可以访问类/对象,例如new IRF.Background()
.
这个框架的目标是被包括这个框架在内的其他项目使用。所以我可能有一个这样的项目:
class TowerMap extends IRF.Game
constructor: (width, height) ->
@background = new IRF.Background(width, height)
如您所见,我必须在IRF
这里使用命名空间,但在这个特定项目中,我想在没有命名空间的情况下使用它,因为我这样做了:
# Require all Class of IRF, so we won't need namespace here
# TODO: get rid of eval
eval("var #{k} = v") for k,v of IRF
class TowerMap extends Game
constructor: (width, height) ->
@background = new Background(width, height)
一切都按预期进行,但不知何故,这两个人eval
打扰了我。可能有另一种解决方案吗?