Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Rosa en 03 de Septiembre 2015, 22:32
-
Buenas noches!
Se plantea el siguiente ejercicio:
Define un tipo de objeto Meteorito 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 estática del tipo meteorito define definicionSegunDiccionario (que debe contener la definición de meteorito) y como métodos estáticos obtenerRadio (que debe devolver el radio a partir de un parámetro diametro) y obtenerTemperaturaFarenheit (que debe devolver el valor de temperatura expresado en grados Farenheit a partir de un parámetro temperatura). Crea un objeto de tipo Meteorito con un diámetro, temperatura y nombre y comprueba que puedes acceder a las propiedades y métodos estáticos mostrando por pantalla la definición de meteorito, la superficie del objeto creado y la temperatura Farenheit del objeto creado.
Y este es mi código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
function Meteorito (diametro, temperatura, nombre) {
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}
Meteorito.definicionSegunDiccionario = 'Fragmento de un bólido que cae sobre la Tierra'; //Propiedad estática
Meteorito.obtenerRadio = function () {
this.radio=(this.diametro)/2;
alert('El radio es: '+this.radio);} //Método estático
Meteorito.obtenerTemperatura= function(){
this.temperaturaF=(this.temperatura)*1.8+32;
alert('La temperatura en grados Farenheit es: '+this.temperaturaF);
}
function ejemploObjetos() {
var meteo1 = new Meteorito(100, 14, 'Luna');
alert('La definicón de meteorito es: '+Meteorito.definicionSegunDiccionario);
Meteorito.obtenerRadio();
Meteorito.obtenerTemperatura();
}
</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 </div>
</body>
</html>
Alguien sabe por qué this.temperatura y this.diametro tomar valor NaN en sus métodos?
Espero vuestra respuesta...Mil gracias
-
Hola Rosa, la clave en este ejercicio está en el concepto de método o propiedad de instancia y método o propiedad estático.
Si pensamos en el tipo de objeto como un molde, las propiedades de instancia son las que son específicas de cada objeto. Por ejemplo si tenemos un molde para fabricar cubos de colores, cada instancia tiene un color distinto.
Sin embargo cuando hablamos de propiedad estática nos referimos a algo que es común a todos las instancias. En este ejemplo si definimos como propiedad estática que el color es rojo, todos los cubos serían rojos, no habría posibilidad de que un cubo fuera azul porque al ser estática es única.
En este ejercicio y releyendo lo que dice la entrega del curso:
Una propiedad o método estático no se duplica en cada objeto, sino que existe una única vez en memoria.
De este ejemplo obtenemos la siguiente conclusión:
No se puede acceder a una propiedad o método estático desde una instancia, hay que hacerlo invocando directamente sobre el nombre del objeto que define el tipo (lo que llamaríamos sobre “la clase”).
El resultado será Soy un taxi Renault con carga undefined ¿Por qué? Porque this hace referencia al objeto dentro del cual se encuentra la invocación y en este caso estamos trabajando con un método estático que no conoce las propiedades de un objeto en particular.
Aplicado al código que has planteado tú:
Meteorito.obtenerRadio = function () {
this.radio=(this.diametro)/2;
alert('El radio es: '+this.radio);} //Método estático
No es válido porque un método estático no conoce las propiades particulares de un objeto, como sería el diámetro. Por tanto this.diametro no puede ser invocado, y this.radio tampoco tiene sentido en este contexto.
Una respuesta al ejercicio puede ser esta:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
function Meteorito (diametro, temperatura, nombre) {
this.diametro=diametro;
this.temperatura=temperatura;
this.nombre=nombre;
}
Meteorito.definicionSegunDiccionario = 'Fragmento de un bólido que cae sobre la Tierra'; //Propiedad estática
Meteorito.obtenerRadio = function (diametro) {
radio=(diametro)/2;
alert('El radio es: '+radio);} //Método estático
Meteorito.obtenerTemperatura= function(temperatura){
temperaturaF=(temperatura)*1.8+32;
alert('La temperatura en grados Farenheit es: '+temperaturaF);
}
function ejemploObjetos() {
var meteo1 = new Meteorito(100, 14, 'Luna');
alert('La definicón de meteorito es: '+Meteorito.definicionSegunDiccionario);
Meteorito.obtenerRadio(100);
Meteorito.obtenerTemperatura(14);
}
</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 </div>
</body>
</html>
Aunque esto no era lo que pedía el ejercicio, podemos darle un giro para asociar el valor de una propiedad a cada instancia haciendo uso de un método estático como en este código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
function Meteorito (diametro, temperaturaGC, nombre) {
this.diametro=diametro;
this.temperaturaGF=Meteorito.obtenerTemperaturaGF(temperaturaGC);
this.nombre=nombre;
}
Meteorito.definicionSegunDiccionario = 'Fragmento de un bólido que cae sobre la Tierra'; //Propiedad estática
Meteorito.obtenerRadio = function (diametro) {
radio=(diametro)/2;
alert('El radio es: '+radio);} //Método estático
Meteorito.obtenerTemperaturaGF= function(temperaturaGC){
return (temperaturaGC)*1.8+32;
}
function ejemploObjetos() {
var meteo1 = new Meteorito(100, 14, 'Luna');
alert('La definicón de meteorito es: '+Meteorito.definicionSegunDiccionario);
Meteorito.obtenerRadio(100);
alert('La temperatura en grados Farenheit es la siguiente : '+meteo1.temperaturaGF);
}
</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 </div>
</body>
</html>
Saludos
-
Muchas gracias, dudas resueltas...