The MooTools JavaScript
Here goes the magic, slightly modified from Dojo:(function() {
// Utility method to get and set objects that may or may not exist
var objectifier = function(splits, create, context) {
var result = context || window;
for(var i = 0, s; result && (s = splits[i]); i++) {
result = (s in result ? result[s] : (create ? result[s] = {} : undefined));
}
return result;
};
// Creates an object if it doesn't already exist
Object.extend("place", function(name, value, context) {
var splits = name.split("."), s = splits.pop(), result = objectifier(splits, true, context);
return result && s ? (result[s] = value) : undefined;
});
// Retrieves an object if not already present
Object.extend("retrieve", function(name, create, context) {
return objectifier(name.split("."), create, context);
});
// Checks to see if the object exists
Object.extend("exists", function(name, context) {
return Object.retrieve(name, false, context) !== undefined;
});
})();
Both methods use a root method for parsing the string and finding the
object, if it exists. The place method creates the object, accepting
the object name, value, and context (base object), creating the object
as desired:// Creates my.namespace.MyClass
Object.place("my.namespace.MyClass", {
name: "David"
});
// my.namespace.MyClass.name = "David"
// Creates some.existing.objecto.my.namespace.MyClass
Object.place("my.namespace.MyClass", {
name: "David"
}, some.existing.objecto); // Has to be an existing object
Likewise, the retrieve method searches for the object, and optionally may create it:// Get an object
Object.retrieve("my.namespace.MyClassToo");
// Try to find an object, create it if it doesn't exist
Object.retrieve("my.namespace.MyClassThree", true);
As a bonus, I've also thrown in an exists method to check for the existence of an object:Object.exists("my.namespace.MyClassToo"); // returns TRUE or FALSE
Woohoo! These are some really nice utility methods to have around if
you're looking to work with dynamic objects and namespaces!