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:

22,304 thoughts on “CoffeeScript lazy singleton class instance function

  1. Have you ever considered publishing an ebook or guest authoring on other blogs?
    I have a blog centered on the same subjects you discuss and would really like
    to have you share some stories/information. I know my visitors would enjoy your work.
    If you’re even remotely interested, feel free to send me an email.

    Feel free to visit my web blog :: Basketball travel team

  2. Simply want to say your article is as amazing.

    The clarity in your post is simply great and i could assume
    you are an expert on this subject. Fine with your permission allow me to
    grab your RSS feed to keep up to date with forthcoming post.

    Thanks a million and please continue the rewarding work.

  3. Today, I went to the beach with my children. I found a sea
    shell and gave it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear and
    screamed. There was a hermit crab inside and it pinched her ear.

    She never wants to go back! LoL I know this
    is entirely off topic but I had to tell someone!

  4. Hello! Quick question that’s totally off topic. Do you know how
    to make your site mobile friendly? My blog looks weird when browsing from my apple iphone.
    I’m trying to find a template or plugin that
    might be able to fix this problem. If you have any suggestions, please share.
    Appreciate it!

  5. Sweet blog! I found it while surfing around on Yahoo News.
    Do you have any suggestions on how to get listed in Yahoo News?
    I’ve been trying for a while but I never seem to
    get there! Thank you

  6. Everything is very open with a clear clarification of the
    issues. It was really informative. Your site is extremely
    helpful. Many thanks for sharing!

  7. hi!,I really like your writing so so much!

    share we be in contact more approximately your article on AOL?
    I need a specialist on this area to resolve my problem. May
    be that’s you! Looking ahead to look you.

  8. I’ve read a few excellent stuff here. Certainly price bookmarking for revisiting.
    I surprise how so much attempt you set to create this type of great informative website.

  9. Can I simply just say what a relief to discover somebody
    that truly understands what they are talking about on the net.

    You actually know how to bring an issue to light and make it important.
    More people must read this and understand this side of your story.
    It’s surprising you are not more popular given that you certainly have the gift.

    Also visit my site; Youth basketball leagues

  10. I do accept as true with all of the ideas you have introduced in your post.
    They are very convincing and will definitely work.
    Nonetheless, the posts are too brief for starters. May just
    you please extend them a bit from next time?
    Thanks for the post.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>