CoffeeScript lazy singleton class instance function

Explanation

“@instance:” allows us to attach an object/value to the Foo class instead of Foo’s prototype. Recall that “@” in CoffeeScript refers to JavaScript’s “this”.

After “@instance:” there is a function that is immediately executed. This function returns a function, closed around a variable called instance. Both these functions have their context (their “this”) bound to the Foo object using CoffeeScript’s wonderful “define and bind” operator “=>” as opposed to the normal function definition operator “->”.

When called, the function that “@instance” ends up referring to simply checks to see if the “instance” variable is empty and if so, assigns a new instance of Foo to it. Newing up a Foo is done using the “@” symbol since the function’s “this” refers to the Foo object. It then returns the instance.

Output

The CoffeeScript above compiles down to this:

23,235 thoughts on “CoffeeScript lazy singleton class instance function

  1. Hi there, just became aware of your blog through Google, and found that it is really informative.
    I’m going to watch out for brussels. I’ll appreciate if you continue this in future.
    Lots of people will be benefited from your
    writing. Cheers!

  2. Excellent goods from you, man. I have bear in mind your stuff prior to and you are simply
    extremely fantastic. I really like what you have received here, really like what you’re saying and the way in which in which you say it.
    You are making it entertaining and you continue to take care of to stay it
    sensible. I can not wait to read much more from you. This is really a tremendous web site.

  3. Hello I am so thrilled I found your site, I really found
    you by error, while I was searching on Yahoo for something else, Anyways I
    am here now and would just like to say thanks a lot for a tremendous post and a all round thrilling blog (I also love the theme/design), I don’t have time to go through it all
    at the moment but I have book-marked it and also added in your RSS
    feeds, so when I have time I will be back to
    read more, Please do keep up the superb b.