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! This is my first comment here so I just wanted to give
    a quick shout out and say I genuinely enjoy reading your blog
    posts. Can you suggest any other blogs/websites/forums that deal with the
    same subjects? Many thanks!

  2. Every weekend i used to go to see this web site, as i want enjoyment, since this this web page conations genuinely nice
    funny material too.

  3. Somebody essentially help to make significantly posts I would
    state. This is the first time I frequented your web page and thus far?
    I amazed with the analysis you made to make this actual put up extraordinary.

    Fantastic task!

  4. Hey There. I found your blog the usage of msn. This is a
    very neatly written article. I’ll be sure to bookmark it and return to read extra of your useful info.
    Thanks for the post. I’ll certainly return.

  5. This is a really good tip especially to those fresh to the blogosphere.
    Simple but very precise info… Appreciate your sharing this one.
    A must read article!

  6. I don’t even know how I ended up here, but I
    thought this post was great. I don’t know who you are but certainly you’re going to a famous blogger if you are not already ;
    ) Cheers!

  7. you are in reality a excellent webmaster. The web site loading
    velocity is amazing. It seems that you are doing any distinctive trick.
    Also, The contents are masterpiece. you have performed a
    great process on this topic!