Say I have a Coffeescript class:
class Foo
MyMethodsBar: () => "bar"
MyMethodsBaz: () => "baz"
Is there any way to encapsulate methods like this (not working):
class Foo
MyMethods:
bar: () => "bar"
baz: () => "baz"
So I can call:
f = new Foo()
f.MyMethods.bar()
The problem is that this
(or @
) is not the instance when I do this like a regular method.
I'm trying to do this for cleaner mixins/concerns.
Thanks,
Erik
Nope, this is not possible, unless you create MyMethods
inside the constructor and bind this
to the methods. At which point you pretty much loose the benefits of using a class.
That's because when you call a method via f.MyMethods.bar()
, this
will refer to f.MyMethods
. To prevent that, you could bind bar
to specific object beforehand. However, at the moment you are defining bar
, the instance of Foo
to which this
should refer to (f
) does not exist yet, so you can't bind it outside of the constructor.
You could call the method with f.MyMethods.bar.call(f)
, but that's rather cumbersome.