Generar propiedades de un objeto (JSON) dinámicamente.
El caso es el siguiente: Tenemos un objeto al que queremos crearle propiedades anidadas pero nos gustaría no tener que preocuparnos de si sus parent existen. por ejemplo, si tuviera un objeto “miObjeto” y quisiera crearle una función en miObjeto.modulos.ctools.watcher, primero tendría que crear ese path. eso o podemos usar esta función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
/** * Genera propiedades de un objeto (JSON) dinamicamente. * @returns objeto extendido. */ function extend(base, ns_string) { var parts = ns_string.split('.'), pl, i; pl = parts.length; for (i = 0; i < pl; i++) { //create a property if it doesnt exist if (typeof base[parts[i]] == 'undefined') { base[parts[i]] = {}; } base = base[parts[i]]; } return base; } |
Y listo, ya podemos extender nuestro objeto de forma dinámica:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
var miObjeto = {}; //console.log("Esto va a dar error porque 'modulos.ctools.watcher' no existe"); //console.log(miObjeto.modulos.ctools); extend(miObjeto, 'modulos.ctools.watcher'); extend(miObjeto, 'settings.general'); miObjeto.modulos.ctools.watcher = function () { console.log("Soy una función!"); }; console.log(miObjeto); |
Resultado:
Chau!
Gracias !!! ,e sirvió tu aporte 😀