This is possible with some custom code:
First define the namespace function and named object function like so:
var jaf = {}; // define a top level global object for your library
/**
* Creates a named Object with a <tt>name</tt> field which is assigned the
* <tt>strName</tt> and a toString method
* @private
* @param {String} strName The name of the named object
*/
function namedObject(strName) {
return {
name: strName,
toString: function() {
return this.name;
}
};
}
/**
* Createa new namespace(s) globally or returns existing ones if already created. Namespaces
* can be used to avoid creating a lot of global objects and structuring a project's
* modules and classes. Namespaces are like packages in java. The namespace is a
* simple string or a dot separated string of characters that are allowed in identifiers
* e.g. "jaf.core" is a valid namespace but "jaf.1" is not.
* @param {String} strNs The namespace string
* @return {Object} The namespace object
*/
var namespace = function(strNs) {
var arrNsc = strNs.split(".");
var nsObj = null;
var i = 0;
var len = arrNsc.length;
var nsName = "";
if(arrNsc[0] === "jaf") {
nsObj = jaf;
i = 1;
nsName = "jaf.";
}
for(; i < len; i++) {
var ns = arrNsc[i];
nsName += (ns + ".");
if(!nsObj) {
if(!window[ns]) {
nsObj = window[ns] = namedObject(nsName.substring(0, nsName.length - 1));
}else {
nsObj = window[ns];
}
}else {
if(!nsObj[ns]) {
nsObj = nsObj[ns] = namedObject(nsName.substring(0, nsName.length - 1));
}else {
nsObj = nsObj[ns];
}
}
}
return nsObj;
}
Then you can do:
var ns = namespace("jaf.core.util");
ns.MyUtil = function() {
// do something important
}
With if you change the variable "jaf" as global object make sure you change the namespace function with appropriate variable. But still you can also do something like:
var ns1 = namespace("abc.def.ghi")
ns1.get1() = function() {}
ns1.get2() = function() {}
ns1.get3() = function() {}
It will still work this way.