</div><div>var Singleton = function() { </div><div> var attr = 1, fn = function(){ console.log("I am executed in closure");}; </div><div> return { </div><div> method : function(){ fn(); }, </div><div> getAttr : function(){ console.log("will be returned: " + attr ); return attr; } </div><div> }; </div><div>}(); </div><div>Singleton.method(); </div><div>Singleton.getAttr(); </div><div>var LazySingleton = function(){ </div><div>var attr = 2, fn = function(){ console.log("I am LazySingleton function");}; </div><div>var obj = { </div><div>method : function(){ fn(); }, </div><div>getAttr : function(){ return attr; } </div><div>}; </div><div>function init(){ </div><div>return obj; </div><div>} </div><div>return { getInstance: init}; </div><div>}(); </div><div>LazySingleton.getInstance().method(); </div><div>console.log("LazySingleton: " + LazySingleton.getInstance().getAttr()); </div><div>function Universe() {</div><div> if (typeof Universe.instance === 'object') {</div><div> return Universe.instance;</div><div> }</div><div> this.start_time = 0;</div><div> this.bang = "Big";</div><div> Universe.instance = this;</div><div> // return this implicitly</div><div>}</div><div>// test</div><div>var uni = new Universe();</div><div>var uni2 = new Universe();</div><div>console.log(uni === uni2); // true</div><div>function Universe2() {</div><div> // instance cached</div><div> var instance = this;</div><div> this.start_time = 0;</div><div> this.bang = "Big";</div><div> Universe2 = function () {</div><div> return instance;</div><div> };</div><div>}</div><div>var un1i = new Universe2();</div><div>var un1i2 = new Universe2();</div><div>un1i.bang = "123";</div><div>console.log(un1i === un1i2); // true</div><div>console.log(un1i2.bang); // 123</div><div>var Universe3;</div><div>(function () {</div><div> var instance;</div><div> Universe3 = function Universe3() {</div><div> if (instance) {</div><div> return instance;</div><div> }</div><div> instance = this;</div><div> this.start_time = 0;</div><div> this.bang = "Big";</div><div> };</div><div>} ());</div><div>var a = new Universe3();</div><div>var b = new Universe3();</div><div>alert(a === b); // true</div><div>a.bang = "123";</div><div>alert(b.bang); // 123</div><div>