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! Someone in my Facebook group shared this site with us so I came to give
    it a look. I’m definitely enjoying the information. I’m book-marking and will be tweeting this
    to my followers! Wonderful blog and fantastic style and design.

  2. Hello! I just wish to give you a huge thumbs up for the excellent
    information you have right here on this post. I am coming back to your site for more
    soon.

  3. hello there and thank you for your info – I’ve definitely
    picked up something new from right here. I did however expertise several technical points using this web site, since I experienced to reload the website
    a lot of times previous to I could get it to load properly.
    I had been wondering if your hosting is OK?
    Not that I’m complaining, but slow loading instances times will often affect your placement in google and
    could damage your high-quality score if ads and marketing with
    Adwords. Anyway I am adding this RSS to my
    email and can look out for much more of your respective exciting content.
    Make sure you update this again soon.