$.extend()
es uno de esas funciones de jQuery que quizás no son las que más utilizarías al comenzar a trabajar con este estupendo framework, pero que con el tiempo descubres que puede ser de inmensa ayuda, ya que es una solución simple a una tarea bastante común: mezclar objetos o arreglos.
Revisaré tres ejemplos de uso. Claramente, se puede utilizar en muchísimos casos más; como siempre, los comentarios quedan abiertos para aportes. Para una referencia completa, puedes echar un vistazo a su documentación.
Fusionar objetos y arrays
Partamos por lo más sencillo. Supongamos que queremos sobreescribir un montón de propiedades de un objeto en particular (actualizar_comentario
sobre comentario
); por ejemplo:
var comentario = { autor : 'Jack Sparrow', email : 'noesreal@piratebay.org', sitio_web : 'http://www.imdb.com', contenido : 'Aaaaaarrgh... ye olde cannon blew me leg away', post : 1099, notificar_actualizaciones : 1, fecha : '2010-05-21' } var actualizar_comentario = { email : 'tampocoesreal@piratebay.org', notificar_actualizaciones : 0, autor : 'Davy Jones', fecha : '2010-05-28' } var nuevo_comentario = $.extend(comentario, actualizar_comentario); /** * nuevo_comentario = { * autor : 'Davy Jones', * email : 'tampocoesreal@piratebay.org', * sitio_web : 'http://www.imdb.com', * contenido : 'Aaaaaarrgh... ye olde cannon blew me leg away', * post : 1099, * notificar_actualizaciones : 0, * fecha : '2010-05-28' */
Y también funciona con arreglos:
var array1 = [0, 1, 2, 3, 4, 5, 6]; var array2 = [2, 1, 1, 2]; var nuevo_array = $.extend(array1, array2); // nuevo_array = [2, 1, 1, 2, 4, 5, 6];
Opciones predeterminadas en una función
En PHP u otros lenguajes, es posible especificar fácilmente un valor predeterminado para un argumento en una función al definirla (por ejemplo, con algo como function mi_funcion($arg1='bazinga'){ //hacer algo }
); sin embargo javascript no incorpora esta característica… por suerte tenemos a jQuery para venir al rescate: utilizando el mismo principio, podemos definir nuestros argumentos predeterminados como un objeto, y luego extenderlo con las propiedades que pasamos a la función. Por ejemplo:
function mi_funcion(args){ opciones = jQuery.extend({ clase_activa : 'active', animacion : 'slide', duracion : 150, idioma : 'es', mensaje : 'bazinga!' }, args); alert(opciones.mensaje); } //Y luego, al llamar a la función... mi_funcion({ duracion: 200, idioma : 'en', mensaje : 'lorem ipsum' });
Extensiones a jQuery
Finalmente, es posible también utilizar $.extend()
para aumentar las posibilidades de jQuery. Puedes agregar nuevos métodos, selectores personalizados, etc.
Por ejemplo, podrías agregar un pequeño método que se agregará a jQuery para saber si un determinado selector existe en la página actual:
jQuery.extend({ exists : function(selector) { return ( jQuery(selector).length ) ? true : false; } }); /** * Ejemplo de uso: * * if ( jQuery.exists('a[hreflang=en]') ) { * alert('Hay enlaces hacia páginas en inglés'); * } else { * alert('No hay enlaces hacia páginas en inglés'); * } */