> Manuales > Manual de Mootools

Veamos la función $merge(), del core de Mootools, que sirve para combinar varios objetos origen en uno solo, destino, sin alterar los objetos origen.

Continuamos con nuestro manual de Mootools, en este caso explicando otra de las funciones del core de Mootools, llamada $merge(). Forma parte, como decimos, del core de Mootools y nos quedaba por estudiar todavía, aunque no tenía sentido explicarla sin haber explicado antes la creación de clases y objetos con Mootools.

Esta función, $merge(), sirve para crear un objeto a partir de la fusión de otros objetos. Recibe varios parámetros, en número indeterminado, pero dos como mínimo, que deben ser objetos. $merge() devuelve un nuevo objeto, que es la combinación de todos esos objetos recibidos por parámetro. Además, deja los objetos iniciales (los enviados por parámetro) inalterados y sin referenciar en el nuevo objeto resultante de la fusión de objetos.

Cómo funciona la fusión de $merge()

Simplemente se crea un objeto totalmente nuevo, que tiene todas las propiedades y métodos de los objetos iniciales. Además, si una propiedad o método se repite en nombre, ocurre que el elemento del último objeto fusionado es el que prevalece.

Veamos un primer ejemplo sencillo, de la fusión de dos objetos:

//creo dos objetos
var obj1 = {a: 1, b:4};
var obj2 = {a: 3, c:2};

//fusiono los objetos
obj_fusion = $merge(obj1, obj2);
//obj_fusion vale {a:3, b:4, c:2};

//muestro los valores
alert (obj_fusion.a);
alert (obj_fusion.b);
alert (obj_fusion.c);

Como se puede ver, la propiedad "a", que estaba repetida en los dos objetos, toma el valor del segundo objeto fusionado.

Podemos ver el resultado de la ejecución de este código en una página aparte.

Ahora veamos un segundo ejemplo de uso de $merge():

Vamos a crear tres clases, que hemos llamado "lechuga", "filete" y "manzana". Luego instanciaremos 3 objetos a partir de esas clases, que combinaremos para crear un nuevo objeto "comida". Luego veremos cómo queda dicho objeto "comida" y cómo los objetos iniciales han quedado inalterados.

//creo la clase lechuga
var Lechuga = new Class({
   color: "Verde",
   tipo: "Rizada",
   sazonar: function(){
      alert ("Estoy lista para comer");
   }   
});

//creo la clase filete
var Filete = new Class({
   initialize: function(animal, peso){
      this.procedencia= animal;
      this.peso= peso;
   }
});

//ahora creo la clase manzana
var Manzana = new Class({
   color: "Amarilla",
   sabor: "dulce"
});

//instancio 3 objetos a partir de las clases creadas
miLechuga = new Lechuga();
miFilete = new Filete("Pollo", 0.2);
miManzana = new Manzana();

//utilizo merge para combinar los tres objetos
$comida = $merge(miLechuga, miFilete, miManzana);

//muestro las propiedades del objeto combinado
alert($comida.tipo);
alert($comida.procedencia);
alert($comida.sabor);
//La propiedad color, que estaba repetida, toma el valor del último objeto combinado.
//el último objeto combinado era la manzana de color amarilla
alert($comida.color);

//pero los objetos iniciales está inalterados. Muestro la propiedad color de los mismos
alert(miLechuga.color);
alert(miManzana.color);

Podemos ver en marcha el código de este segundo ejemplo en una página aparte.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual