$.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');
* }
*/
2 responses
[…] usas este patrón como parte de un constructor de claseAh, y por cierto, en jQuery puedes lograr algo bastante similar con jQuery.extend()Siguientes pasosCompartir en TwitterÚnete a la discusiónSuscríbete a […]
buen artículo, una pregunta esta función de jquery puede ser usada para extender una función como si fuera una herencia, o sea tengo una funcion x y quiero extender la funcionalidad de esta…