JavaScript/Notes/Singleton: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
(Undo revision 47016 by TimFerris (talk))
 
(One intermediate revision by one other user not shown)
(No difference)

Latest revision as of 22:14, 7 March 2015

Singleton with information hiding.

Constructors[edit | edit source]

Before going over Singleton patterns, lets first take a look at how constructors work.

Lazy Initialization[edit | edit source]

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[edit | edit source]

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>

Function scope allows us to hide variable `b`. jsbin

Object literal notation does not provide any information hiding mechanism: <source lang="javascript"> // exposed variables. var a = 3; var b = a + 2; var anObject = {

 name : b;

}; </source>

Example: APE Animation Manager