Hola, estoy intentado resolver el ejercicio CU01149E del curso de JavaScript y la verdad es que no entiendo porqué el código no se ejecuta como debiera.
Tal y como yo he entendido el ejercicio, los objetos zanahoria, lechuga y tomate tienen como prototipo al objeto hortaliza (un prototipo hortaliza para zanahoria, otro para lechuga, y otro para tomate). A su vez, el objeto hortaliza tiene como prototipo al objeto planta cultivada; por último, planta cultivada tiene como prototipo al objeto vegetal.
El caso es que cuando intento acceder a las propiedades definidas para los objetos primarios y sus prototipos, sólo obtengo los resultados esperados para 'tomate' y para 'hortaliza', que es su prototipo directo. Si intento acceder a las propiedades 'nombreCientifico' o 'movilidad, definidas para 'plantaCultivada' y 'vegetal' respetivamente el valor que me devuelve es undefined. No sé porqué ocurre esto.
Si alguien pudiera echarme una mano se lo agradecería. Un saludo.
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">
function zanahoria() {
this.valorCalórico = '45 cal';
this.tipoDeHortaliza = undefined;
}
function lechuga() {
this.valorCalórico = '31 cal';
this.tipoDeHortaliza = undefined;
}
function tomate() {
this.valorCalórico = '39 cal';
this.tipoDeHortaliza = undefined;
}
function hortaliza() {
this.componentePrincipal = 'agua';
}
zanahoria.prototype = new hortaliza();
lechuga.prototype = new hortaliza();
tomate.prototype = new hortaliza();
function plantaCultivada() {
this.nombreCientifico = 'desconocido';
}
hortaliza.prototype = new plantaCultivada();
function vegetal() {
this.movilidad = 'ser vivo sin movilidad';
}
plantaCultivada.prototype = new vegetal();
function empezar() {
var tomate1 = new tomate();
tomate1.tipoDeHortaliza = 'tomatillo';
tomate1.nombreCientifico = 'tomatus totalus';
alert(tomate1.tipoDeHortaliza);
alert(tomate1.valorCalórico);
alert(tomate1.componentePrincipal);
alert(tomate1.nombreCientífico); //undefined
alert(tomate1.movilidad); //undefined
}
</script>
</head>
<body>
<p onclick="empezar()">Empezar</p>
</body>
</html>