0

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

0

1 Answer 1

1

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.

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

Comments

Your Answer

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.