Creando clases en Javascript con apply

15/Dic/2010 JavaScript , , , , 2 Comentarios

Ayer veíamos que podíamos crear clases con Javascript mediante el método call. El método call nos permitía el invocar a múltiples constructores, reutilizando una estructura de clases coherentes.

Si bien, en Javascript contamos con otro método. El método .apply(). Este método, al fin y al cabo, viene a hacer lo mismo que hace el método .call(). Pero de otra forma.

Si recordamos, teníamos dos clases definidas DatosBasicos y Domicilio.

  1. function datosbasicos(nombre,apellido,edad) {
  2. this.nombre = nombre;
  3. this.apellido = apellido;
  4. this.edad = edad;
  5. }
  6.  
  7. function domicilio(direccion,cp,ciudad){
  8. this.direccion = direccion;
  9. this.cp = cp;
  10. this.ciudad = ciudad;
  11. }

Y queríamos crear una clase Persona instanciando a los constructores de estas dos clases. El método .apply() nos permite hacer esto. Pero a diferencia del método .call(), .apply() recibe como parámetro el valor arguments. La variable arguments incluye todos los atributos de la clase que invoca.

Así, si definimos la clase Persona con .apply() sería de la siguiente forma:

  1. function persona(nombre,apellido,edad,direccion,cp,ciudad){
  2. datosbasicos.apply(this,arguments);
  3. domicilio.apply(this,arguments);
  4. }

Esto nos presenta un pequeño inconveniente, ya que deberemos de modificar DatosBásicos y Domicilio para que reciban todos los parámetros:

  1. function datosbasicos(nombre,apellido,edad,direccion,cp,ciudad) {
  2. this.nombre = nombre;
  3. this.apellido = apellido;
  4. this.edad = edad;
  5. }
  6.  
  7. function domicilio(nombre,apellido,edad,direccion,cp,ciudad){
  8. this.direccion = direccion;
  9. this.cp = cp;
  10. this.ciudad = ciudad;
  11. }

Un pequeño inconveniente, pero que nos permite mantener la estructura de clases. Ahora ya solo te queda decidir cuál de los dos métodos en Javascript utilizar. Si .call() o .apply().

Vídeos sobre Javascript


2 comentarios en “Creando clases en Javascript con apply”

Víctor Cuervo

Miguel

Se que llego dos años tarde pero, no es necesario enviar el objeto arguments a las clases datosbasicos y domicilio el código de la clase Persona podria quedar así perfectamente :

function Persona ( nombre , apellido , edad , direccion , cp , ciudad ) {
DatosBasicos.apply( this , [ nombre, apellido , edad ] );
Domicilio.apply( this, [ direccion , cp , ciudad ] );
}

Por lo tanto no seria necesario modificar las subclases y la funcionalidad seria la misma.

Un saludo

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*