JavaScript/Notes/Singleton: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
(Created page with "Singleton with information hiding. == Factory Method == function getAnObject(a) { var anObject; return (getAnObject = function() { if(! anObject ) { anObject =...")
 
(16 intermediate revisions by 3 users not shown)
Line 1: Line 1:
Singleton with information hiding.
Singleton with information hiding.


== Factory Method ==
== Constructors ==  
Before going over Singleton patterns, lets first take a look at [http://jsbin.com/IBAbIgI/6/edit how constructors work].
 
== 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) {
function getAnObject(a) {
   var anObject;
   var anObject;
  var b = a + 1;


   return (getAnObject = function() {
   return (getAnObject = function() {
     if(! anObject ) {
     if(! anObject ) {
       anObject = {name: a};
       anObject = {name: b};
     }
     }
     return anObject;
     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;
};


== Instant Loaded ==  
var o1 = new C(3);
var o2 = new C(4);
var o3 = new C(5);
</source>
 
Example: Constructors and prototype inheritance.
[http://jsbin.com/IBAbIgI/6/edit jsbin]
 
Singleton:
<source lang="javascript">
var anObject = new function(a) {
var anObject = new function(a) {
   this.name = 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`.
[http://jsbin.com/ErAHEFo/1/edit 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: [http://garretts.github.io/ape-javascript-library/build/anim/Animation.js APE Animation Manager]

Revision as of 19:58, 23 November 2013

Singleton with information hiding.

Constructors

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

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