# Lazy singleton with BackboneJS

I am trying to have a Backbone.Model which is a singleton and I wish to instantiate it lazily. I only need to support modern browsers so please do not worry about the use of ES5 getter.

Is this the simplest way of achieving my goal?

var LazySingleton = function(){
var _LazySingleton = Backbone.Model.extend({
defaults: {
foo: 0
},
initialize: function(){
console.log('I am initializing');
}
});

return {
_instance: null,
get instance() {
if (this._instance === null) {
this._instance = new _LazySingleton();
}

return this._instance;
}
};
}();

console.log('LazySingleton has been declared, but not initialized');
LazySingleton.instance.set('foo', 3);
console.log('foo should be 3:', LazySingleton.instance.get('foo'));


This is not the simplest way.

• There seems to be no point in instance, if there can be only 1 instance, why have it all ?
• Why have initialize at all ?
• Why set foo to 0, I would set it undefined
• If I were to keep the instance concept, I would write this:

_instance: null,
get instance() {
if (this._instance === null) {
this._instance = new _LazySingleton();
}

return this._instance;
}


as

_instance: null,
get instance() {
return this._instance = this._instance || new _LazySingleton();
}


I would probably go for something like this ( I might have the syntax wrong )

var LazySingleton = Backbone.Model.extend({
defaults: {
foo: undefined
},
initialize: function(){
});