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: bermartinv en 10 de Febrero 2016, 22:29
		
			
			- 
				Respuesta para el ejercicio CU01144E del curso de JavaScript:
 
  Define un tipo de objeto Medico en JavaScript que tenga como propiedades: nombre (String), personasCuradas (número entero), especialidad (String) y como métodos un método denominado curarPersona y otro método denominado mostrarDatos. El método curarPersona deberá añadir una unidad al valor de la propiedad personasCuradas y el método mostrarDatos deberá mostrar los datos el médico. Por ejemplo, “El médico se llama Juan Eslava, su especialidad es traumatología y lleva curadas 8 personas”. Crea dos objetos del tipo definido, e invoca sus métodos para comprobar que funcionan correctamente.
 
 Crea las dos alternativas de código: métodos con funciones internas anónimas o métodos con referencia a funciones externas.
 
 
 Adjunto código para funciones anónimas
 
 <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>Document</title>
 </head>
 <script>
 function crearMedico(nombre,curados,especialidad){
 this.nombre = nombre;
 this.curados = curados;
 this.especialidad = especialidad;
 this.curarPersona=function (){
 curados--;
 }
 this.mostrarDatos=function(){
 var msg = "El nombre del medico "+this.nombre+" lleva "+this.curados+" curados y su especialidad es "+this.especialidad;
 alert (msg);
 }
 }
 
 function crearObjeto(){
 var medico1 = new crearMedico("Pep",3,"urologo");
 var medico2=new crearMedico("Paco",5,"traumatólogo");
 medico1.mostrarDatos();
 medico2.mostrarDatos();
 }
 
 
 
 </script>
 <body>
 <input type="button" value="Añadir medico" onclick="crearObjeto()"/>
 </body>
 </html>
 
 Y para funciones externas
 
 <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>Document</title>
 </head>
 <script>
 function crearMedico(nombre,curados,especialidad){
 this.nombre = nombre;
 this.curados = curados;
 this.especialidad = especialidad;
 this.curarPersona=disminuir;
 this.mostrarDatos=muestrear;
 }
 
 function disminuir(){
 this.curados--;
 }
 function muestrear(){
 var msg = "El nombre del medico "+this.nombre+" lleva "+this.curados+" curados y su especialidad es "+this.especialidad;
 alert (msg);
 }
 
 
 function crearObjeto(){
 var medico1 = new crearMedico("Pep",3,"urologo");
 var medico2=new crearMedico("Paco",5,"traumatólogo");
 medico1.mostrarDatos();
 medico2.mostrarDatos();
 }
 
 
 
 </script>
 <body>
 <input type="button" value="Añadir medico" onclick="crearObjeto()"/>
 </body>
 </html>
- 
				Buenas bermartinv
 
 En este ejercicio se intenta trabajar con objetos JavaScript. A la hora de nombrar una función definidora de objeto debes ponerle un nombre que refleje lo que va a ser un objeto creado con dicha función, por ejemplo en este caso sería function Medico porque lo que se va a crear con esa función son objetos de tipo Medico
 
 De este modo después de esta línea podrás decir:
 
 var medico1 = new crearMedico("Pep",3,"urologo");
 
 He creado un objeto Medico denominado medico1
 
 En lugar de "he creado un objeto crearMedico denominado medico1"
 
 Tienes que mejorar varias cosas:
 
 El ejercicio pedía "Crea dos objetos del tipo definido, e invoca sus métodos para comprobar que funcionan correctamente." No has invocado sus métodos, con lo cual no se comprueba que funcionen correctamente.
 
 De hecho tienes este código:      this.curarPersona=function (){curados--; } ¿En lugar de ir curando cada vez más personas el médico va curando cada vez menos? Es al revés, cada vez que invocas el método debe incrementarse en una unidad el número de personas curadas.
 
 Revisa el código y para probarlo en el propio código crea varios médicos, invoca los métodos sobre los objetos y después de invocar los métodos muestra los datos, de ese modo puedes comprobar si después de ejecutar el método ha habido cambios en el objeto o no y si los cambios son los deseados. Por ejemplo después de invocar el método curarPersona si pides los datos del médico deberá mostrarte que ha curado una persona más de lo que llevaba anteriormente.
 
 Salu2
- 
				Gracias por corregit mis fallos y entiendo lo que me dices.
 Para funciones anónimas ( me faltaba especificar en el metodo curarPersona especificar que cada aumento era en cada variable de cada objeto):
 <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>Document</title>
 </head>
 <script>
 function Medico(nombre,curados,especialidad){
 this.nombre = nombre;
 this.curados = curados;
 this.especialidad = especialidad;
 this.curarPersona=function (){
 this.curados++;
 }
 this.mostrarDatos=function(){
 var msg = "El nombre del medico "+this.nombre+" lleva "+this.curados+" curados y su especialidad es "+this.especialidad;
 alert (msg);
 }
 }
 
 function crearObjeto(){
 var medico1 = new Medico("Pep",3,"urologo");
 var medico2=new Medico("Paco",5,"traumatólogo");
 medico1.curarPersona();
 medico1.curarPersona();
 medico1.curarPersona();
 medico2.curarPersona();
 medico1.mostrarDatos();
 medico2.mostrarDatos();
 }
 
 
 
 </script>
 <body>
 <input type="button" value="Añadir medico" onclick="crearObjeto()"/>
 </body>
 </html>
 Para funciones externas:
 
 <!DOCTYPE html>
 <html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>Document</title>
 </head>
 <script>
 function Medico(nombre,curados,especialidad){
 this.nombre = nombre;
 this.curados = curados;
 this.especialidad = especialidad;
 this.curarPersona=disminuir;
 this.mostrarDatos=muestrear;
 }
 
 function disminuir(){
 this.curados++;
 }
 function muestrear(){
 var msg = "El nombre del medico "+this.nombre+" lleva "+this.curados+" curados y su especialidad es "+this.especialidad;
 alert (msg);
 }
 
 
 function crearObjeto(){
 var medico1 = new Medico("Pep",3,"urologo");
 var medico2=new Medico("Paco",5,"traumatólogo");
 medico1.curarPersona();
 medico1.curarPersona();
 medico1.curarPersona();
 medico2.curarPersona();
 medico1.mostrarDatos();
 medico2.mostrarDatos();
 }
 
 
 
 </script>
 <body>
 <input type="button" value="Añadir medico" onclick="crearObjeto()"/>
 </body>
 </html>
 Y lo dicho, muchas gracias.
- 
				Buenas, bermartinv.
 
 Veo el código bien y las observaciones por parte de Ogramar.
 
 Sólo una cosita que se te ha escapado en el segundo código que has puesto. Creo que en el ejemplo de las funciones externas querías poner function aumentar y no disminuir, porque realmente, después de la corrección por tu parte, lo que haces es aumentar las personas curadas. Pero ya te digo, supongo que es por no darte cuenta.
 
 Para ver que el método "curarPersonas" funciona correctamente, yo invoqué primero el método "mostrarDatos" luego "curarPersonas" y después otra vez "mostrarDatos". De dicha forma realmente se observa que la cantidad de las personas curada sube (sin que tengas que mirar el código "por dentro").
 
 Mira, mi código ha quedado de la siguiente forma:
 
 <!DOCTYPE html>
 <html>
 <head>
 <meta charset="utf-8"/>
 <title>Ejemplo aprenderaprogramar.com</title>
 <script type="text/javascript">
 
 function medico(){
 this.nombre='Juan Eslava';
 this.personasCuradas=8;
 this.especialidad='traumatología';
 this.curarPersonas=function(){
 this.personasCuradas=this.personasCuradas+1;
 }
 this.mostrarDatos=function(){
 var msg='El médico se llama: '+this.nombre+', su especialidad es: '+this.especialidad+' y lleva curadas: '+this.personasCuradas;
 alert(msg);
 }
 }
 
 
 function ejemploObjetos(){
 var datosMedico= new medico();
 var datosMedico2=new medico();//no se ve la diferencia, porque las propiedades en la función medico(); tienen el mismo valor, pero vemos que el código funciona.
 datosMedico.mostrarDatos();
 datosMedico.curarPersonas();
 datosMedico.mostrarDatos();
 datosMedico.curarPersonas();
 datosMedico.mostrarDatos();
 datosMedico2.mostrarDatos();
 datosMedico2.curarPersonas();
 datosMedico2.mostrarDatos();
 datosMedico2.curarPersonas();
 datosMedico2.mostrarDatos();
 }
 </script>
 </head>
 <body>
 <div id="cabecera">
 <h2>Cursos aprenderaprogramar.com</h2>
 <h3>Ejemplos JavaScript</h3>
 </div>
 <div style="color: blue;" id="pulsador" onclick="ejemploObjetos()">Probar ejercicio</div>
 </body>
 </html>
 También tengo que decir que no tiene mucho sentido crear dos objetos definidos con los mismos valores, pero como en el ejercicio ponía que siempre se tenía que mostrar que el médico se llama: Juan Eslava y es traumatólog, decidí que no tendía que pasar los valores como parámetros de una función a la otra, pero debo admitir que como lo has hecho tu, se ve que son dos médicos distintos.
 
 Saludos.
- 
				Tienes razón dimiste, se me pasó.
 Respecto a tu código tengo que decirte el algo. La función medico, por decirlo de una manera es el constructor de los objetos, ahí definiremos las características de cada objeto y cuando llamemos a esta función le daremos todas las variables del objeto. No se inicializa los valores con un objeto específico como has hecho. Como puedes ver has creado los datos de un medico pero para crear otro médico que harias?
 Lo suyo es crear un objeto como definición.
 function constructor(variable1,variable2,variable3){
 this.nombre = variable1;
 this.ciudad = variable2;
 this.edad = variable3;
 }
 function crearObjeto(){
 persona1 = new constructor("Paco","Madrid",32);
 persona2 = new constructor("Pep","Valencia",34);
 persona3 = new constructor("Maria","Barcelona",45);
 }
 }
De esta forma hemos construido un constructor de objetos
- 
				Sí, sí. Es así. Te comenté que no veía mucho sentido que siempre apareciera el nombre del mismo médico, pero había entendido así el ejercicio.
 
 Saludos.