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