Função $merge() do core Mootools

Vejamos a função $merge(), do core de Mootools, que serve para combinar vários objetos origem em um só destino, sem alterar os objetos origem.

Por Miguel Angel Alvarez - Tradução de JML


Publicado em: 06/3/09
Valorize este artigo:
Continuamos com nosso manual de Mootools, neste caso explicando outra das funções do core de Mootools, chamada $merge(). Faz parte, como dizíamos, do core de Mootools que ainda nos faltava estudar, apesar de não ter sentido explicá-la sem ter falado antes da criação de classes e objetos com Mootools.

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.






Usuários :    login / registro
Manuais relacionados
Categorias relacionadas
O autor

Home | Sobre nós | Copyright | Anuncie | Entrar em contato