JavaScript/Notes/Singleton
Singleton with information hiding.
Lazy Initialization
This example of a Singleton uses my patented "function rewriting" technique, where `getAnObject` is identifier is reassigned to the nested closure. <source lang="javascript"> function getAnObject(a) {
var anObject;
var b = a + 1;
return (getAnObject = function() { if(! anObject ) { anObject = {name: b}; } return anObject; })();
} </source>
Eager Initialization
Not a Singleton, but a constructor. <source lang="javascript"> // Not a Singleton. var C = function(a) {
var b = a + 2; this.name = b;
};
var o1 = new C(3); var o2 = new C(4); var o3 = new C(5); </source>
Example: Constructors and prototype inheritance. jsbin
Singleton: <source lang="javascript"> var anObject = new function(a) { // hidden variables.
var b = a + 2; this.name = b;
}(3);
alert(anObject.name); alert(typeof b); // "undefined" </source>
The function scope allows us to hide variable `b`. jsbin
An object literal does not allow information hiding: <source lang="javascript"> // exposed variables. var a = 3; var b = a + 2; var anObject = {
name : b;
}; </source>
Example: APE Animation Manager