JavaScript/Notes/Singleton

From Noisebridge
< JavaScript
Revision as of 10:04, 23 November 2013 by Garrett (Talk | contribs)

Jump to: navigation, search

Singleton with information hiding.

Lazy Initialization

function getAnObject(a) {
  var anObject;
 
  var b = a + 1;
 
  return (getAnObject = function() {
    if(! anObject ) {
      anObject = {name: b};
    }
    return anObject;
  })();
}

Eager Initialization

Not a Singleton, but a constructor.

// Not a Singleton.
var C = function(a) {
  var b = a + 2;
  this.name = b;
};
 
var anObject = new C(3);

Example: Constructors and prototype inheritance. jsbin

Singleton:

var anObject = new function(a) {
// hidden variables.
  var b = a + 2;
  this.name = b;
}(3);
 
alert(anObject.name); 
alert(typeof b); // "undefined"

The function scope allows us to hide variable `b`. jsbin

An object literal does not allow information hiding:

// exposed variables.
var a = 3;
var b = a + 2;
var anObject = {
  name : b;
};

Example: APE Animation Manager

Personal tools