Autor Tema: JavaScript Prototype cómo se implementa la herencia new this var CU01147E  (Leído 4595 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
La posible solución del ejercicio CU01147E del curso JavaScript desde cero es:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function cometa(diametro,temperatura,nombre){
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}

cometa.prototype=new prototipoCometa();

function prototipoCometa(){
this.difinicionSegunDiccionario='Los cometas son cuerpos celestes constituidos por hielo, polvo y rocas que orbitan alrededor del Sol siguiendo diferentes trayectorias elípticas, parabólicas o hiperbólicas. Los cometas, junto con los asteroides, planetas y satélites, forman parte del Sistema Solar.';
this.obtenerRadio=function(){this.radio=this.diametro/2;}
this.obtenerFarenheit=function(){this.farenheit=this.temperatura+32;};

}

function ejemploObjetos(){
var cometa1=new cometa(2000,800,'McNaught');
var cometa2=new cometa(3500,900,'West');
var cometa3=new cometa(5500,1000,'Ikeya-Seki');
cometa1.obtenerRadio();
cometa1.obtenerFarenheit();
alert('El diametro del cometa: '+cometa1.nombre+' es de: '+cometa1.diametro+'m, su tempertarua es de: '+cometa1.temperatura+'ºC. \nTiene un radio de :'+cometa1.radio+'m y su tempertaura en Farenheit es: '+cometa1.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa1.difinicionSegunDiccionario);
cometa2.obtenerRadio();
cometa2.obtenerFarenheit();
alert('El diametro del cometa: '+cometa2.nombre+' es de: '+cometa2.diametro+'m, su tempertarua es de: '+cometa2.temperatura+'ºC. \nTiene un radio de :'+cometa2.radio+'m y su tempertaura en Farenheit es: '+cometa2.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa2.difinicionSegunDiccionario);
cometa3.obtenerRadio();
cometa3.obtenerFarenheit();
alert('El diametro del cometa: '+cometa3.nombre+' es de: '+cometa3.diametro+'m, su tempertarua es de: '+cometa3.temperatura+'ºC. \nTiene un radio de :'+cometa3.radio+'m y su tempertaura en Farenheit es: '+cometa3.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa3.difinicionSegunDiccionario);
}

</script>
</head>
<body>
<div id="cabecera" style="text-align: center;">
<h2>Cursos Aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<input style="margin-left: 45%;" type="button" value="Info Cometas" onclick="ejemploObjetos()"></input>
</body>
</html>

Gracias.
« Última modificación: 18 de Febrero 2016, 08:40 por César Krall »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #1 en: 15 de Febrero 2016, 21:58 »
Hola dimiste.

Veo todo bien.

Por comentar algo, podrías mejorar el código usando algún bucle, imagina que en vez de ser 3 cometas fueran 300. :o

Saludos.

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #2 en: 15 de Febrero 2016, 23:29 »
Bua, me volvería loco, jejeje.

Ahora que lo pienso y releo lo que pedía el ejercicio.

Citar
EJERCICIO

Define un tipo de objeto Cometa cuyas propiedades de instancia (específicas de cada objeto) sean diametro, temperatura y nombre. La temperatura será un valor numérico que suponemos está en grados centígrados. Como propiedad común a todos los objetos de tipo cometa define definicionSegunDiccionario (que debe contener la definición de cometa según el diccionario) y como métodos comunes obtenerRadio (que debe devolver el radio) y obtenerTemperaturaFarenheit (que debe devolver el valor de temperatura expresado en grados Farenheit).  Crea tres objetos de tipo cometa y comprueba que puedes acceder tanto a las propiedades específicas como a las propiedades comunes y métodos comunes desde cada objeto.

Creo que me he equivocado, porque dice: obtenerRadio (que debe devolver el radio) y yo no lo hago devolver, sino que hago una función que lo calculé. Creo que siempre cuando utilizan el término "devuelve" se tiene que poner en la función "return". O no? No sé, allí me pierdo.

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #3 en: 15 de Febrero 2016, 23:35 »
En realidad si, si te pide que devuelva algo, debería ser usando return.

Saludos.

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #4 en: 16 de Febrero 2016, 16:24 »
Creo que el código debería ser así:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function cometa(diametro,temperatura,nombre){
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}

cometa.prototype=new prototipoCometa();

function prototipoCometa(){
this.difinicionSegunDiccionario='Los cometas son cuerpos celestes constituidos por hielo, polvo y rocas que orbitan alrededor del Sol siguiendo diferentes trayectorias elípticas, parabólicas o hiperbólicas. Los cometas, junto con los asteroides, planetas y satélites, forman parte del Sistema Solar.';
this.obtenerRadio=function(){return this.diametro/2;}
this.obtenerFarenheit=function(){return this.temperatura+32;};

}

function ejemploObjetos(){
var cometa1=new cometa(2000,800,'McNaught');
var cometa2=new cometa(3500,900,'West');
var cometa3=new cometa(5500,1000,'Ikeya-Seki');

alert('El diametro del cometa: '+cometa1.nombre+' es de: '+cometa1.diametro+'m, su tempertarua es de: '+cometa1.temperatura+'ºC. \nTiene un radio de :'+cometa1.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa1.obtenerFarenheit()+'ºF.\n\nLa definición del dicho cometa es: '+cometa1.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa2.nombre+' es de: '+cometa2.diametro+'m, su tempertarua es de: '+cometa2.temperatura+'ºC. \nTiene un radio de :'+cometa2.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa2.obtenerFarenheit()+'ºF.\n\nLa definición del dicho cometa es: '+cometa2.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa3.nombre+' es de: '+cometa3.diametro+'m, su tempertarua es de: '+cometa3.temperatura+'ºC. \nTiene un radio de :'+cometa3.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa3.obtenerFarenheit()+'ºF.\n\nLa definición del dicho cometa es: '+cometa3.difinicionSegunDiccionario);
}
</script>
</head>
<body>
<div id="cabecera" style="text-align: center;">
<h2>Cursos Aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<input style="margin-left: 45%;" type="button" value="Info Cometas" onclick="ejemploObjetos()"></input>
</body>
</html>

Es así?

Por qué en el siguiente código la propiedad "farenheit" devuelve un valor "indefined"?

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function cometa(diametro,temperatura,nombre){
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}

cometa.prototype=new prototipoCometa();

function prototipoCometa(){
this.difinicionSegunDiccionario='Los cometas son cuerpos celestes constituidos por hielo, polvo y rocas que orbitan alrededor del Sol siguiendo diferentes trayectorias elípticas, parabólicas o hiperbólicas. Los cometas, junto con los asteroides, planetas y satélites, forman parte del Sistema Solar.';
this.obtenerRadio=function(){return this.diametro/2;}
this.obtenerFarenheit=function(){this.farenheit=this.temperatura+32;};

}

function ejemploObjetos(){
var cometa1=new cometa(2000,800,'McNaught');
var cometa2=new cometa(3500,900,'West');
var cometa3=new cometa(5500,1000,'Ikeya-Seki');

alert('El diametro del cometa: '+cometa1.nombre+' es de: '+cometa1.diametro+'m, su tempertarua es de: '+cometa1.temperatura+'ºC. \nTiene un radio de :'+cometa1.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa1.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa1.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa2.nombre+' es de: '+cometa2.diametro+'m, su tempertarua es de: '+cometa2.temperatura+'ºC. \nTiene un radio de :'+cometa2.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa2.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa2.difinicionSegunDiccionario);

alert('El diametro del cometa: '+cometa3.nombre+' es de: '+cometa3.diametro+'m, su tempertarua es de: '+cometa3.temperatura+'ºC. \nTiene un radio de :'+cometa3.obtenerRadio()+'m y su tempertaura en Farenheit es: '+cometa3.farenheit+'ºF.\n\nLa definición del dicho cometa es: '+cometa3.difinicionSegunDiccionario);
}
</script>
</head>
<body>
<div id="cabecera" style="text-align: center;">
<h2>Cursos Aprenderaprogramar.com</h2>
<h3>Ejemplo JavaScript</h3>
</div>
<input style="margin-left: 45%;" type="button" value="Info Cometas" onclick="ejemploObjetos()"></input>
</body>
</html>

Gracias.


pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #5 en: 16 de Febrero 2016, 17:23 »
Hola,

El primer código ahora ya está completado satisfactoriamente.

En cuanto al segundo, te da undefined, porque farenheit no esta definido como propiedad ni como función de cometa. Vamos, que no existe.

Cuando haces esto en la linea del alert ...
Código: [Seleccionar]
cometa1.farenheitEstá intentando acceder a la propiedad farenheit, la cual no existe. Lo mismo te pasa en los tres alert.

Saludos.

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #6 en: 16 de Febrero 2016, 23:05 »
Recuerda dimiste que las funciones tienen que realizar alguna acción, devolver algún dato.
Repasa la función obtenerFarenheit y como dice Pedro la llamada de la función la tienes que hacer llamando a la función.

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01147E JavaScript Prototype
« Respuesta #7 en: 17 de Febrero 2016, 09:23 »
Buenos días, chicos.

Gracias por la ayuda. Pensaba que la propiedad "this.farenheit" no tenía porque declararse y que funcionaría de la misma manera que la propiedad "this.definicionSegunDiccionario". Pero es verdad, la propiedad "this.definicionSegunDiccionario" sí es una propiedad, en cambio, "this.farenheit" está dentro de un método estático y no está declarada anteriormente. Vamos, que no existe.

Sobre lo que me comentaste, bermartinv, no se puede llamar una propiedad desde una función si llamar a la función tambien?

Gracias.

 

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".