Hacker News new | ask | show | jobs
by swankpot 5597 days ago
I fail to see how the following code from the book is an example of a singleton:

01 var mySingleton = function(){

02

03 /* here are my private variables and methods /

04 var privateVariable = 'something private';

05 function showPrivate(){

06 console.log(privateVariable);

07 }

08

09 / public variables and methods (which can access private variables and methods ) */

10 return {

11 publicMethod:function(){

12 showPrivate();

13 },

14 publicVar:'the public can see this!'

15 }

16 }

17

18 var single = mySingleton();

Also, the code is missing semicolons. Missing semicolons is a problem when minifying the code. I would recommend running your example code through JS lint for the next edition of the book.

Still, I've been looking to improve my JS foo and reading through this book may help. I will continue. It is attractively formatted and addresses topics that I want to know more about.

1 comments

The code above doesn't provide a Singleton implementation, you can test it by using the expression mySingleton() == mySingleton() which should evaluate to true, while it evaluates to false. The problem is that the function returns an object literal but every time the function is called it creates a new one (i.e. {} == {} evaluates to false). You can find a sound definition of a Singleton in JavaScript which makes use of the (quite tricky) Lazy Function Definition here: http://stackoverflow.com/questions/1895635/javascript-single... . EDIT: Took a deeper look at the "book" and the singleton section and I think it somewhat misuses the term Singleton (or it uses in a "broad" sense): the example you reported provides some information hiding but no single instantiation restriction, which it is instead provided by the final example/iteration.