Namespaces en JavaScript, versión Ecma-262 5

Hace ya un tiempo, publiqué este pequeño snippet de código para generar namespaces desde strings:

function namespace(path, root) {
    // valor por defecto
    root = root || this;

    var
        parts = path.split("."),
        l = parts.length,
        leaf;

    for(i = 0; i < l; i++) {
        leaf = parts[i];

        if(!root[leaf]) {
            root[leaf] = {};
        }

        root = root[leaf]
    }

    return root;
}

Refactor mediante, dicho snippet se puede reducir en gran manera gracias al fabuloso método Array#reduce:

function namespace(path, root) {
	return path.split('.').reduce(function(memo, current) {
		return memo[current] || (memo[current] = {});
	}, root || this);
};

El caso de uso es similar al snippet anterior:

namespace('foo');
foo; // Object {}

// El ultimo eslabon esta disponible
namespace('foo.bar.baz.bax').value = 1;
foo.bar.baz.bax.value; // 1

Obviamente (y como el título indica), este snippet es válido para todas los entornos que implementen Ecma-262 en su versión 5 o posterior (esto excluye a IE < 9).



2 views shared on this article. Join in...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Comment

You may use these tags : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>