Tres usos para jQuery.extend()

$.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');
 * }
 */