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.
function datosbasicos(nombre,apellido,edad) {
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
}
function domicilio(direccion,cp,ciudad){
this.direccion = direccion;
this.cp = cp;
this.ciudad = ciudad;
}
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:
function persona(nombre,apellido,edad,direccion,cp,ciudad){
datosbasicos.apply(this,arguments);
domicilio.apply(this,arguments);
}
Esto nos presenta un pequeño inconveniente, ya que deberemos de modificar DatosBásicos y Domicilio para que reciban todos los parámetros:
function datosbasicos(nombre,apellido,edad,direccion,cp,ciudad) {
this.nombre = nombre;
this.apellido = apellido;
this.edad = edad;
}
function domicilio(nombre,apellido,edad,direccion,cp,ciudad){
this.direccion = direccion;
this.cp = cp;
this.ciudad = ciudad;
}
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().