静的ヘルパークラスをcoffeescriptで記述したいと思います。これは可能ですか?
クラス:
class Box2DUtility
constructor: () ->
drawWorld: (world, context) ->
使用:
Box2DUtility.drawWorld(w,c);
静的ヘルパークラスをcoffeescriptで記述したいと思います。これは可能ですか?
クラス:
class Box2DUtility
constructor: () ->
drawWorld: (world, context) ->
使用:
Box2DUtility.drawWorld(w,c);
回答:
クラスメソッドの前に@
:を付けることで、クラスメソッドを定義できます。
class Box2DUtility
constructor: () ->
@drawWorld: (world, context) -> alert 'World drawn!'
# And then draw your world...
Box2DUtility.drawWorld()
デモ:http://jsfiddle.net/ambiguous/5yPh7/
そしてdrawWorld
、コンストラクターのように動作させたい場合は、次のように言うことができますnew @
。
class Box2DUtility
constructor: (s) -> @s = s
m: () -> alert "instance method called: #{@s}"
@drawWorld: (s) -> new @ s
Box2DUtility.drawWorld('pancakes').m()
this
。これがJavaScriptの動作方法であるため、JavaScriptについては何もできません。実際にはクラスもありません。オブジェクト、プロトタイプ、コンストラクター関数だけなので、用語はさらに混乱します。コンストラクター関数のプロパティとして関数をアタッチすること(これがここで起こっていることです)は、私たちが持っているクラスメソッドに最も近いものです。JavaScriptBox2DUtility::drawWorld
が機能しないことを確認してください。
constructor: (@s) ->
も第二の例では動作しますか?(つまり、手動割り当ての代わりに@s = s
)