Namespaces o espacios de nombre virtuales en javascript

En la mayoría de lenguajes de programación relativamente maduros o potentes, existe lo que denominamos namespace o espacio de nombres. Los namespace no son otra cosa que unos contenedores de nombre donde podremos contener clases, funciones y variables que pueden repetirse con el mismo nombre en otros espacios de nombre o namespace sin que ello suponga un error. Un ejemplo claro de cual es la verdadera utilidad organizadora de los namespace o espacios de nombres es en las librerías gráficas de los lenguajes de programación, ya que en estas librerías un elemento muy común suele ser la clase Window que hace referencia a una ventana pero que puede estar dentro de GTK, QT, .Net, API de Windows, etc. (esto no es muy correcto puesto que GTK seria GTKWindow pero es por poner un ejemplo). Javascript, como un lenguaje ya mas que maduro con el paso de los años y relativamente estandarizado por los navegadores modernos, pese a ser un lenguaje de programación multiparadigma, al igual que haga PHP, también tiene namespaces o espacios de nombre, aunque debido a la debilidad de las variables estos namespaces son mas virtuales que reales.

Entendiendo que es y para que sirve un namespace, para declararlo en javascript, lo que debemos de hacer es utilizar arrays para generarlo. Gracias a la debilidad y dinamismo de las variables en javascript, podemos asignar a una variable un array de posiciones por nombre y acceder a estas mediante un signo de puntuación «.» y no por su clave común de array [«clave»], por lo que aquí es donde viene el truco. Básicamente lo que hacemos al declarar un namespace en javascript es asignar a un variable un array con las posiciones del namespace y luego ya dentro de estas posiciones, acceder como si desde .Net o Java se tratase. Con un ejemplo se ve mas sencillo.

var Indalcasa = { Utilidades : {} };

Indalcasa.Utilidades.MiClase = function() {
  this.variable = "valor";

  this.metodo = function(parametros) {
    return this.variable + " " + parametros;
  }
};

var iClase = new Indalcasa.Utilidades.MiClase();
iClase.variable = "nuevo valor";
alert(iClase.metodo("prueba"));

El ejemplo anterior mostrará una ventana de alert con un mensaje tal que «nuevo valor prueba», ya que hemos instanciado la clase, le hemos cambiado el valor al atributo de la clase y en el método de la clase, concatenamos el valor del atributo de la clase al parámetros que hemos pasado. Esto es un pequeño y sencillo ejemplo de lo que se puede hacer con javascript, namespaces y clases.