Wer globale Objekte vermeiden will, aber trotzdem globalen Zugriff will (z.B. auf eine Datenbankinstanz) baut sich eine Registry. Im Prinzip nur das Singleton-Pattern mit get und set-Methoden:
registry = (function() {
// private attributes
var blubb = new Array();
// private methods
var getIndex = function(_name) {
for (var i = 0; i < blubb.length; i++) {
if (blubb[i].name == _name) {
return i;
}
}
return null;
};
return {
// public attributes
// public methods
setValue : function(_name, _value) {
var foo = this.getValue(_name);
if (foo == null) {
var temp = new Object();
temp.name = _name;
temp.value = _value;
blubb.push(temp);
} else {
blubb[getIndex(_name)].value = _value;
}
},
getValue : function(_name) {
for (var i = 0; i < blubb.length; i++) {
if (blubb[i].name == _name) {
return blubb[i].value;
}
}
return null;
}
}
})();
// registry is already available
registry.setValue("foo", "bar");
registry.getValue("foo"); // gives "bar"
registry.getValue("bar"); // gives null
[/sourcecode]
Siehe auch: http://yuiblog.com/blog/2007/06/12/module-pattern/