In Javascript Adding a namespace string like in C #

I want to write a line like I do in C #

namespace abc.def.ghi{

   get1();
   get2();
   get3();
   get4();    
}

to reduce my text in many lines like

abc.def.ghi.get1();
abc.def.ghi.get2();
abc.def.ghi.get3();
abc.def.ghi.get4();

Is this possible in javascript?

+5
source share
3 answers

Objects The way I did learn

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

Perhaps I misunderstood this question. If you want to reduce input, click

var ns = abc.def.ghi;
ns.get1();

etc.

+3
source

This is possible using a special code:

First define a namespace function and name the function of the object as follows:

     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
     }

"jaf" , , . - :

   var ns1 = namespace("abc.def.ghi")
   ns1.get1() = function() {}
   ns1.get2() = function() {}
   ns1.get3() = function() {}

.

+1

You can use the operator with:

with (abc.def.ghi){    
   get1();
   get2();
   get3();
   get4();    
}

But:

Note. Although using a with statement can make your program shorter, misusing c can slow down your program significantly.

Efficiency would be better just to store the object reference in a local variable, as Psytronic suggests .

0
source

All Articles