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. Hey there! I know this is somewhat off topic but I was wondering which blog platform are
    you using for this site? I’m getting fed up of WordPress because I’ve had issues with hackers and I’m looking at alternatives for another platform.
    I would be great if you could point me in the direction of Buy a business
    good platform.

  2. I’m extremely inspired along with your writing skills as well as with the format in your
    blog. Is this a paid theme or did you modify it your self?

    Either way stay up the nice high quality writing, it is rare to
    peer a nice weblog like this one today..

  3. hey there and thank you for your information – I have certainly picked up
    something new from right here. I did however expertise a few technical issues
    using this website, as I experienced to reload the web site lots of times previous to I could get it to load correctly.
    I had been wondering if your hosting is OK? Not that I am complaining, but slow loading instances times will very frequently
    affect your placement in google and can damage your high-quality score if advertising and marketing with Adwords.
    Anyway I’m adding this RSS to my email and could look out for much more of your
    respective intriguing content. Make sure you update
    this again very soon.

  4. hey there and thank you for your info – I have definitely picked up anything new from right here.
    I did however expertise some technical points using this web site, as I experienced to reload the website lots
    of times previous to I could get it to load correctly. I had been wondering
    if your hosting is OK? Not that I am complaining, but sluggish loading instances times will sometimes affect your placement in google
    and can damage your quality score if advertising and marketing with Adwords.
    Well I’m adding this RSS to my email and could look out for much more of
    your respective intriguing content. Make sure you update this again very soon.

  5. Pretty section of content. I just stumbled upon your
    weblog and in accession capital to say that I get actually enjoyed
    account your weblog posts. Any way I’ll be subscribing
    for your feeds and even I fulfillment you access constantly quickly.