Chcę napisać statyczną klasę pomocniczą w coffeescript. czy to możliwe?
klasa:
class Box2DUtility
constructor: () ->
drawWorld: (world, context) ->
za pomocą:
Box2DUtility.drawWorld(w,c);
Chcę napisać statyczną klasę pomocniczą w coffeescript. czy to możliwe?
klasa:
class Box2DUtility
constructor: () ->
drawWorld: (world, context) ->
za pomocą:
Box2DUtility.drawWorld(w,c);
Odpowiedzi:
Możesz zdefiniować metody klas, poprzedzając je przedrostkiem @
:
class Box2DUtility
constructor: () ->
@drawWorld: (world, context) -> alert 'World drawn!'
# And then draw your world...
Box2DUtility.drawWorld()
Demo: http://jsfiddle.net/ambiguous/5yPh7/
A jeśli chcesz, abyś drawWorld
zachowywał się jak konstruktor, możesz powiedzieć new @
tak:
class Box2DUtility
constructor: (s) -> @s = s
m: () -> alert "instance method called: #{@s}"
@drawWorld: (s) -> new @ s
Box2DUtility.drawWorld('pancakes').m()
this
, tak po prostu działa JavaScript, więc nie możesz nic z tym zrobić. Tak naprawdę nie mamy też klas, tylko obiekty, prototypy i funkcje konstruktorów, więc terminologia jest jeszcze bardziej zagmatwana. Dołączanie funkcji jako właściwości funkcji konstruktora (co się tutaj dzieje) jest najbliższym odpowiednikiem metody klasowej, jaką mamy. Sprawdź, czy JavaScript Box2DUtility::drawWorld
nie działa.
constructor: (@s) ->
zadziałałoby również w drugim przykładzie? (tj. zamiast przypisywania ręcznego@s = s
)