16 marzo, 2008

Javascript namespaces

En este artículo (remy sharp's b:log) implementan una interesantísima función que permite a partir de una cadena namespace (nombres de objetos anidados separados por puntos como com.thinkweb2.projects.namespace) crear los objetos anidados adecuados sin tener que especificar explícitamente cada objeto:

// creando la estructura anidada manualmente es engorroso
var com = {
  thinkweb2: {
    projects: {
      namespace: 'una propiedad anidada'
    }
  }
}
 
com.thinkweb2.projects.namespace // => una propiedad anidada
La función es la siguiente y no tiene dependencias.
String.prototype.namespace = function(separator) {
    var ns = this.split(separator || '.'), p = window;
    for (var i = 0; i < ns.length; i++) {
        p = p[ns[i]] = p[ns[i]] || {};
    }
};

2 comentarios:

Juan Pulido dijo...

Hola,
En el articulo al que haces alusión alguien comenta:
la variable 'i' del contador debe declararse local 'var i', de otra forma 'i' tendría ámbito (alcance) global - exactamente lo que namespaces debería prevenir.

alsanan dijo...

Hola Juan. Tienes razón. Texto editado.

Publicar un comentario en la entrada

Últimos links en indiza.com