Why use a constructor and prototyping for a single object?

The above is equivalent to:

var earth= {
someMethod: function () {
if (console && console.log)
console.log('some method');
}
};
privateFunction1();
privateFunction2();


return {
Person: Constructors.Person,
PlanetEarth: earth
};

(1) UPDATE 2019: ES7 Version

class Singleton {
static instance;


constructor() {
if (instance) {
return instance;
}


this.instance = this;
}


foo() {
// ...
}
}


console.log(new Singleton() === new Singleton());

(2) ES6 Version

class Singleton {
constructor() {
const instance = this.constructor.instance;
if (instance) {
return instance;
}


this.constructor.instance = this;
}


foo() {
// ...
}
}


console.log(new Singleton() === new Singleton());

Best solution found: http://code.google.com/p/jslibs/wiki/JavascriptTips#Singleton_pattern

function MySingletonClass () {


if (arguments.callee._singletonInstance) {
return arguments.callee._singletonInstance;
}


arguments.callee._singletonInstance = this;


this.Foo = function () {
// ...
};
}


var a = new MySingletonClass();
var b = MySingletonClass();
console.log( a === b ); // prints: true

For those who want the strict version:

(function (global) {
"use strict";
var MySingletonClass = function () {


if (MySingletonClass.prototype._singletonInstance) {
return MySingletonClass.prototype._singletonInstance;
}


MySingletonClass.prototype._singletonInstance = this;


this.Foo = function() {
// ...
};
};


var a = new MySingletonClass();
var b = MySingletonClass();
global.result = a === b;


} (window));


console.log(result);

Extending the above post by Tom, if you need a class type declaration and access the singleton instance using a variable, the code below might be of help. I like this notation as the code is little self guiding.

function SingletonClass(){
if ( arguments.callee.instance )
return arguments.callee.instance;
arguments.callee.instance = this;
}




SingletonClass.getInstance = function() {
var singletonClass = new SingletonClass();
return singletonClass;
};

To access the singleton, you would

var singleTon = SingletonClass.getInstance();