jQuery
object.The jQuery JavaScript
Since jQuery's philosophy is to use the same method for getting and setting, we'll be doing this same for creating and retrieving objects; in this case, we'll use theobj
method:(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;
};
// Gets or sets an object
jQuery.obj = function(name, value, create, context) {
// Setter
if(value != undefined) {
var splits = name.split("."), s = splits.pop(), result = objectifier(splits, true, context);
return result && s ? (result[s] = value) : undefined;
}
// Getter
else {
return objectifier(name.split("."), create, context);
}
};
})();
As with the MooTools alternative, the objectifier
function is enough to handle both getting and setting, as well as doing
both within a given context (existing object). Here are a few examples
of how you can use the new jQuery.obj
method:// Check for existence
var moduleNameExists = jQuery.obj("mynamespace.widget.moduleName"); // undefined
// Create the obj
jQuery.obj("mynamespace.widget.moduleName", { prop: 1 }); // mynamespace.widget.moduleName.prop returns 1
// Create an object on existing object
jQuery.obj("subnamespace.subModuleName", { someProp: 8 }, true, mynamespace.widget);
// mynamespace.widget.subnamespace.subModuleName = { someProp: 8 }
As I work more with jQuery, both with its provided methods and other
third party tools, accessing arbitrary objects by string and sometimes
context allows me to avoid the dance of manual object and property
existence checks. Of course the essence of this script is really the objectifier
method, which can be added to any framework or toolkit, but with a
framework as popular as jQuery, why not just put it out there for
everyone?