86

I want to write a static helper class in coffeescript. Is this possible?

class:

class Box2DUtility

  constructor: () ->

  drawWorld: (world, context) ->

using:

Box2DUtility.drawWorld(w,c);

1 Answer 1

179

You can define class methods by prefixing them with @:

class Box2DUtility
  constructor: () ->
  @drawWorld: (world, context) -> alert 'World drawn!'

# And then draw your world...
Box2DUtility.drawWorld()

Demo: http://jsfiddle.net/ambiguous/5yPh7/

And if you want your drawWorld to act like a constructor then you can say new @ like this:

class Box2DUtility
  constructor: (s) -> @s = s
  m: () -> alert "instance method called: #{@s}"
  @drawWorld: (s) -> new @ s

Box2DUtility.drawWorld('pancakes').m()

Demo: http://jsfiddle.net/ambiguous/bjPds/1/

Sign up to request clarification or add additional context in comments.

Would constructor: (@s) -> also work in the second example? (i.e., instead of the manual assignment @s = s)
@TrippLilley: Yes, you could do it that way if you prefer.
But if we puts methods into 'this', they didn't be truly static anymore, isn't it? Truly static methods should stay in obj.prototype. In example of Shawn Mclean we may call methods like this: Box2DUtility::drawWorld(w,c);
@SergeyPanfilov: But anything in the prototype is also available through this, that's just how JavaScript works so you can't do anything about it. We don't really have classes either, just objects, prototypes, and constructor functions so the terminology is even more confused. Attaching functions as properties of the constructor function (which is what's happening here) is the closest equivalent to a class method we have. Check the JavaScript Box2DUtility::drawWorld won't work.
@AlvaroLourenço Seems that a CoffeeScript class is a "static block" (with some extra stuff): jsfiddle.net/ambiguous/ap72ckax

Your Answer

Draft saved
Draft discarded

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.