Con la función $extend() del core de Mootools, podemos extender unos objetos con las propiedades y métodos de otros objetos. También mostramos cómo crear clases a partir de extender otras clases con objetos.
En el artículo Extend: Extendiendo clases con Mootools explicamos qué es la extensión de clases, para crear clases nuevas, a partir de otras ya creadas, a las que se le añaden características y funcionalidades nuevas. En este caso vamos a seguir viendo modos de trabajo con Mootools a la hora de extender clases.
Extender un objeto con las características y funcionalidades de otro
Vamos a aprender a utilizar la función $extend() del core de Mootools, para extender un objeto con otro. Con $extend() indicamos como parámetros dos objetos y entonces conseguimos que el objeto del primer parámetro se extienda con las funcionalidades y propiedades del objeto del segundo parámetro.
Tenemos estas dos clases de las que hemos creado dos objetos:
var Ordenador = new Class({
cpu: "Intel 486",
hd: "180 Mb",
procesar: function(x){
alert("Procesando " + x);
}
});
miOrdenador = new Ordenador();
var Portatil = new Class({
cpu: "Pentium",
pantalla: "800x600",
cargaBateria: function(){
alert("Cargando bateria");
}
});
miPortatil = new Portatil();
Son los objetos miOrdenador, de la clase Ordenador. Y miPortatil, de la clase Portátil. Ambos tienen propiedades y métodos, siendo que alguna propiedad (cpu) está repetida en uno y en el otro, pero con valores distintos.
Ahora podemos hacer uso de $extend() de esta manera:
//extiendo el objeto miOrdenador con las propiedades y métodos de miPortatil
$extend(miOrdenador, miPortatil);
Con esto he conseguido que el objeto miOrdenador adquiera las propiedades y métodos de miPortatil. Después de este paso todas las propiedades y métodos de ambos objetos estarán presentes en miOrdenador y miPortatil quedará inalterado. Además la propiedad cpu de miOrdenador será igual al valor que había en el objeto miPortatil.
Podríamos ejecutar estas líneas para comprobar los valores de los parámetros y la presencia de los distintos métodos.
//el campo CPU, repetido, toma el valor del objeto del segundo parámetro
alert(miOrdenador.cpu);
alert(miOrdenador.hd);
//el campo pantalla, que era de miPortatil, queda ahora dentro de miOrdenador.
alert(miOrdenador.pantalla);
miOrdenador.procesar("algo");
//el método de miPortatil queda también en miOrdenador.
miOrdenador.cargaBateria();
Como señalábamos, miPortatil no será alterado, eso lo podemos comprobar tratando de mostrar la propiedad hd, que no debería estar en ese objeto.
//el objeto miPortatil queda inalterado
alert(miPortatil.hd); //mostrará undefined
Veamos el ejemplo en marcha en una página aparte.
Extender una clase a través de un objeto
Entre las posibilidades de extend y la extensión de clases en mootools, se pueden añadir propiedades y métodos de un objeto a una clase de mootools. Esto es un poco extraño, puesto que no se entiende muy bien para qué puede servir extender clases con objetos, ya que además son cosas distintas, pero el caso es que se puede y he decidido poner un ejemplo, por si en algún momento a alguien le sirve de utilidad.
Para continuar con el ejemplo de clases anterior, vamos crear una nueva clase a partir de la clase Ordenador, que se ha extendido con las propiedades y métodos del objeto miPortatil.
var OrdenadorPortatil = Ordenador.extend(miPortatil);
Con ello tenemos la clase OrdenadorPortatil, que tiene las propiedades y métodos de la clase Ordenador, más los que había en el objeto miPortatil.
Podemos probar ahora el funcionamiento de esta clase OrdenadorPortatil a partir de este código:
miOrdenador2 = new OrdenadorPortatil();
alert(miOrdenador2.cpu);
alert(miOrdenador2.hd);
alert(miOrdenador2.pantalla);
miOrdenador2.procesar("algo");
Podemos ver el ejemplo en marcha en una página aparte.
Extender un objeto con las características y funcionalidades de otro
Vamos a aprender a utilizar la función $extend() del core de Mootools, para extender un objeto con otro. Con $extend() indicamos como parámetros dos objetos y entonces conseguimos que el objeto del primer parámetro se extienda con las funcionalidades y propiedades del objeto del segundo parámetro.
Tenemos estas dos clases de las que hemos creado dos objetos:
var Ordenador = new Class({
cpu: "Intel 486",
hd: "180 Mb",
procesar: function(x){
alert("Procesando " + x);
}
});
miOrdenador = new Ordenador();
var Portatil = new Class({
cpu: "Pentium",
pantalla: "800x600",
cargaBateria: function(){
alert("Cargando bateria");
}
});
miPortatil = new Portatil();
Son los objetos miOrdenador, de la clase Ordenador. Y miPortatil, de la clase Portátil. Ambos tienen propiedades y métodos, siendo que alguna propiedad (cpu) está repetida en uno y en el otro, pero con valores distintos.
Ahora podemos hacer uso de $extend() de esta manera:
//extiendo el objeto miOrdenador con las propiedades y métodos de miPortatil
$extend(miOrdenador, miPortatil);
Con esto he conseguido que el objeto miOrdenador adquiera las propiedades y métodos de miPortatil. Después de este paso todas las propiedades y métodos de ambos objetos estarán presentes en miOrdenador y miPortatil quedará inalterado. Además la propiedad cpu de miOrdenador será igual al valor que había en el objeto miPortatil.
Podríamos ejecutar estas líneas para comprobar los valores de los parámetros y la presencia de los distintos métodos.
//el campo CPU, repetido, toma el valor del objeto del segundo parámetro
alert(miOrdenador.cpu);
alert(miOrdenador.hd);
//el campo pantalla, que era de miPortatil, queda ahora dentro de miOrdenador.
alert(miOrdenador.pantalla);
miOrdenador.procesar("algo");
//el método de miPortatil queda también en miOrdenador.
miOrdenador.cargaBateria();
Como señalábamos, miPortatil no será alterado, eso lo podemos comprobar tratando de mostrar la propiedad hd, que no debería estar en ese objeto.
//el objeto miPortatil queda inalterado
alert(miPortatil.hd); //mostrará undefined
Veamos el ejemplo en marcha en una página aparte.
Extender una clase a través de un objeto
Entre las posibilidades de extend y la extensión de clases en mootools, se pueden añadir propiedades y métodos de un objeto a una clase de mootools. Esto es un poco extraño, puesto que no se entiende muy bien para qué puede servir extender clases con objetos, ya que además son cosas distintas, pero el caso es que se puede y he decidido poner un ejemplo, por si en algún momento a alguien le sirve de utilidad.
Para continuar con el ejemplo de clases anterior, vamos crear una nueva clase a partir de la clase Ordenador, que se ha extendido con las propiedades y métodos del objeto miPortatil.
var OrdenadorPortatil = Ordenador.extend(miPortatil);
Con ello tenemos la clase OrdenadorPortatil, que tiene las propiedades y métodos de la clase Ordenador, más los que había en el objeto miPortatil.
Podemos probar ahora el funcionamiento de esta clase OrdenadorPortatil a partir de este código:
miOrdenador2 = new OrdenadorPortatil();
alert(miOrdenador2.cpu);
alert(miOrdenador2.hd);
alert(miOrdenador2.pantalla);
miOrdenador2.procesar("algo");
Podemos ver el ejemplo en marcha en una página aparte.
Miguel Angel Alvarez
Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...