Esta função, $merge(), serve para criar um objeto a partir da fusão de outros objetos. Recebe vários parâmetros, em número indeterminado, porém, como mínimo dois devem ser objetos. $merge() devolve um novo objeto, que é a combinação de todos esses objetos recebidos por parâmetro. Ademais, deixa os objetos iniciais (os enviados por parâmetro) inalterados e sem referenciar no novo objeto resultante da fusão de objetos.
Como funciona a fusão de $merge()
Simplesmente se cria um objeto totalmente novo, que tem todas as propriedades e métodos dos objetos iniciais. Ademais, se uma propriedade ou método se repete em nome, ocorre que o elemento do último objeto fusionado é o que prevalece.
Vejamos um primeiro exemplo simples, da fusão de dois objetos:
//crio dois objetos
var obj1 = {a: 1, b:4};
var obj2 = {a: 3, c:2};
//fusiono os objetos
obj_fusao = $merge(obj1, obj2);
//obj_fusao vale {a:3, b:4, c:2};
//mostro os valores
alert (obj_fusao.a);
alert (obj_fusao.b);
alert (obj_fusao.c);
Como se pode ver, a propriedade "a", que estava repetida nos dois objetos, toma o valor do segundo objeto fundido.
Podemos ver o resultado da execução deste código em uma página a parte.
Agora vejamos um segundo exemplo de uso de $merge():
Vamos criar três classes, que chamamos "alface", "file" e "cereja". Logo, instanciaremos 3 objetos a partir dessas classes, que combinaremos para criar um novo objeto "comida". Depois, veremos como fica tal objeto "comida" e como os objetos iniciais ficaram inalterados.
//crio a classe alface
var Alface = new Class({
color: "Verde",
tipo: "Crespa",
temperar: function(){
alert ("Estou pronta para comer");
}
});
//crio a classe file
var File = new Class({
initialize: function(animal, peso){
this.procedencia= animal;
this.peso= peso;
}
});
//agora crio a classe cereja
var Cereja = new Class({
color: "Vermelha",
sabor: "doce"
});
//instancio 3 objetos a partir das classes criadas
meuAlface = new Alface();
meuFile = new File("Frango", 0.2);
minhaCereja = new Cereja();
//utilizo merge para combinar os três objetos
$comida = $merge(meuAlface, meuFile, minhaCereja);
//mostro as propriedades do objeto combinado
alert($comida.tipo);
alert($comida.procedencia);
alert($comida.sabor);
//A propriedade cor, que estava repetida, toma o valor do último objeto combinado.
//o último objeto combinado era a cereja de cor vermelha
alert($comida.cor);
//porém os objetos iniciais estão inalterados. Mostro a propriedade cor dos mesmos
alert(meuAlface.cor);
alert(minhaCereja.cor);
Podemos ver em funcionamento o código deste segundo exemplo em uma página à parte.