Autor Tema: JavaScript diferencia entre call y apply para qué sirve ejemplo código CU01150E  (Leído 2802 veces)

C3PO

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola, llevo un par de días dándole vueltas y no soy capaz de encontrar el error:
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
   
<script type="text/javascript">

function persona(nombre,pais){
this.nombre = nombre;
this.nacionalidad = pais;
}
persona.prototype.mostrarNacionalidad = function(){
alert('Soy de:'+this.nacionalidad);
}

function medico(lugarCurro,nombre,nacionalidad){
persona.call(this,nombre,nacionalidad);
this.centroTrabajo = lugarCurro;
}
medico.prototype = new persona();

function medicoEspecialista(especialidad,lugarCurro,nombre,nacionalidad){
medico.call(this,lugarCurro,nombre,nacionalidad);
this.especialidad = especialidad;
}

medicoEspecialista.protoype=new medico();

function ejemploObjetos(){
var medico1 = new medicoEspecialista('medicina deportiva','Madrid','Juan','Español');
medico1.mostrarNacionalidad();
alert('Hola soy:'+medico1.nombre+'\n soy médico especialista en:'+medico1.especialidad+'\n trabajo en:'+medico1.centroTrabajo+'\n soy de:'+medico1.nacionalidad+);
}

</script>
</head>
<body>
   <button onclick="ejemploObjetos()">Medico</button>
   
</body>
</html>
Gracias de antemano.

C3PO

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola, aquí sigo dándole vueltas al "dichoso" código. Tras investigar he llegado a una conclusión, pero no a la solución. Este es el código:
Código: [Seleccionar]
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
   
<script type="text/javascript">

function persona(nombre,pais){
this.nombre = nombre;
this.nacionalidad = pais;
}

persona.prototype.mostrarNacionalidad = function(){
alert('Soy de:'+this.nacionalidad);
}

//persona.prototype.mostrarNacionalidad = 'prueba3';


function medico(lugarCurro,nombre,nacionalidad){
persona.call(this,nombre,nacionalidad);
this.centroTrabajo = lugarCurro;
}
medico.prototype = new persona();

function medicoEspecialista(especialidad,lugarCurro,nombre,nacionalidad){
medico.call(this,lugarCurro,nombre,nacionalidad);
this.especialidad = especialidad;
}

medicoEspecialista.protoype=new medico();

function ejemploObjetos(){
var medico1 = new medicoEspecialista('medicina deportiva','Madrid','Juan','Español');
medico1.mostrarNacionalidad();
//alert(medico1.mostrarNacionalidad);
alert('Hola soy:'+medico1.nombre+'\n soy médico especialista en:'+medico1.especialidad+'\n trabajo en:'+medico1.centroTrabajo+'\n soy de:'+medico1.nacionalidad);
}

</script>
</head>
<body>
   <button onclick="ejemploObjetos()">Medico</button>
   
</body>
</html>
Si utilizo las 2 líneas comentadas:
Código: [Seleccionar]
persona.prototype.mostrarNacionalidad = 'prueba3';
alert(medico1.mostrarNacionalidad);
En vez de:
Código: [Seleccionar]
persona.prototype.mostrarNacionalidad = function(){
alert('Soy de:'+this.nacionalidad);
}
medico1.mostrarNacionalidad();
Me deja ejecutar el código entero, pero al invocar mostrarNacionalidad me da: undefined. Por más vueltas que le doy no acabo de encontrar el problema.

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Hola C3PO,
no veas, para encontrarlo. He encontrado dos cosillas:
Citar
alert('Hola soy:'+medico1.nombre+'\n soy médico especialista en:'+medico1.especialidad+'\n trabajo en:'+medico1.centroTrabajo+'\n soy de:'+medico1.nacionalidad+);
sobra un + en la última declaración de variable --> +medico1.nacionalidad+

Citar
medicoEspecialista.protoype=new medico();
La declaración de protoype --> prototype

Saludos!!!!

C3PO

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Gracias bermartinv!!!

Si había encontrado el "+" que sobraba en la última declaración de variables: (+medico1.nacionalidad+), está corregido en en el 2º código que mande.
Pero el error "medicoEspecialista.protoype=new medico();" me lo he tragado pese haber repasado el código unas cuantas veces. Ya estaba entrando en modo DESESPERACIÓN.
Gracias de nuevo.

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".