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: Dimitar Stefanov en 15 de Febrero 2016, 21:47

Título: JavaScript Prototype cómo se implementa la herencia new this var CU01147E
Publicado por: Dimitar Stefanov en 15 de Febrero 2016, 21:47
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.
Título: Re:CU01147E JavaScript Prototype
Publicado por: pedro,, 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.
Título: Re:CU01147E JavaScript Prototype
Publicado por: Dimitar Stefanov 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.
Título: Re:CU01147E JavaScript Prototype
Publicado por: pedro,, en 15 de Febrero 2016, 23:35
En realidad si, si te pide que devuelva algo, debería ser usando return.

Saludos.
Título: Re:CU01147E JavaScript Prototype
Publicado por: Dimitar Stefanov 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.

Título: Re:CU01147E JavaScript Prototype
Publicado por: pedro,, 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.
Título: Re:CU01147E JavaScript Prototype
Publicado por: bermartinv 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.
Título: Re:CU01147E JavaScript Prototype
Publicado por: Dimitar Stefanov 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.