Я хочу написати статичний допоміжний клас у 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()
Демонстрація: http://jsfiddle.net/ambiguous/bjPds/1/
this
, саме так працює JavaScript, тому ви нічого з цим не зробите. У нас насправді теж немає класів, а лише об'єкти, прототипи та функції конструктора, тому термінологія ще більше плутається. Приєднання функцій як властивостей функції конструктора (що саме тут відбувається) є найближчим еквівалентом методу класу, який ми маємо. Переконайтеся, що JavaScript Box2DUtility::drawWorld
не буде працювати.
constructor: (@s) ->
також працювати в другому прикладі? (тобто замість ручного призначення@s = s
)