I want to write a line like i do in c#
namespace abc.def.ghi{
get1();
get2();
get3();
get4();
}
to reduce my text in so many line like
abc.def.ghi.get1();
abc.def.ghi.get2();
abc.def.ghi.get3();
abc.def.ghi.get4();
Is it possible in javascript?
Objects. The way I learnt anyway
var abc = {};
abc.def = {};
abc.def.ghi = {};
abc.def.ghi.get1 = function(){};
abc.def.ghi.get2 = function(){};
abc.def.ghi.get3 = function(){};
abc.def.ghi.get4 = function(){};
Edit
May have misunderstood the question. If you want to reduce the amount of typing needed, then go with
var ns = abc.def.ghi;
ns.get1();
etc
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With