Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: C3PO en 06 de Abril 2016, 12:42

Título: JavaScript diferencia entre call y apply para qué sirve ejemplo código CU01150E
Publicado por: C3PO en 06 de Abril 2016, 12:42
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.
Título: Re:JavaScript diferencia entre call y apply para qué sirve ejemplo código CU01150E
Publicado por: C3PO en 07 de Abril 2016, 13:57
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.
Título: Re:JavaScript diferencia entre call y apply para qué sirve ejemplo código CU01150E
Publicado por: bermartinv en 07 de Abril 2016, 22:05
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!!!!
Título: Re:JavaScript diferencia entre call y apply para qué sirve ejemplo código CU01150E
Publicado por: C3PO en 08 de Abril 2016, 11:25
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.