작은 프레임 워크를 개선하고 싶습니다. 따라서 eval
에 대한 두 번의 호출을 제거하고 싶습니다. 자바 스크립트 변수를 동적으로 지정합니다. [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)
난 단지 '을 오염'내가 new IRF.Background()
같은 클래스/객체에 액세스 할 수있는 글로벌 네임 스페이스에 IRF
를 원한다.
이 프레임 워크의 목표는이 프레임 워크를 포함한 다른 프로젝트에서 사용됩니다. 그래서 이런 프로젝트가있을 수 있습니다 :
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
의 나를 방해. 다른 해결책이있을 수 있습니까?
첫 번째 아이디어는 'IRF.requireClasses()'와 같은 프레임 워크를 쉽게 요구할 수있게하는 것이 었습니다. 하지만 제대로 작동하지 못했기 때문에 hacky 구현으로 평가했습니다. 하지만 모든 것이 아니라 실제로 사용하는 비트를 요구하는 것이 가장 좋습니다. – Deradon