Creé una clase Animal y una subclase Shark. El constructor de Animal tiene 5 parámetros. Quiero que el constructor Shark tenga solo 3 parámetros. Pero no parece funcionar. ¿Por qué, usando super(), no puedo extraer de la clase principal solo los parámetros del constructor que necesito? Entonces, cuando creo nuevas instancias de Shark, solo puedo pasar 3 argumentos, no 5.
class Animal { constructor(name, age, legs, species, habitat) { this.name = name; this.age = age; this.legs = legs; this.species = species; this.habitat = habitat; } introduce() { return `Hello, my name is ${this.name} and I am ${this.age} years old.`; } } class Shark extends Animal { constructor(name, age, habitat) { super(name, age, habitat); this.legs = 0; this.species = 'shark'; } }¿Por qué la propiedad 'hábitat' no está definida a continuación?
const john = new Shark('John', 15, 'ocean'); -> Shark {name: 'John', age: 15, legs: 0, species: 'shark', habitat: undefined}Al constructor realmente no le importa qué nombres de variables le pasas, solo sus posiciones. Así que esto:
super(name, age, habitat);solo proporciona valores para los primeros tres argumentos del constructor aquí:
constructor(name, age, legs, species, habitat) Así que el habitat no está undefined porque nunca nada lo establece.
En lugar de reducir los argumentos del constructor y establecer las propiedades manualmente, confíe en la clase base para establecer sus propias propiedades y pasarlas a su constructor:
class Animal { constructor(name, age, legs, species, habitat) { this.name = name; this.age = age; this.legs = legs; this.species = species; this.habitat = habitat; } introduce() { return `Hello, my name is ${this.name} and I am ${this.age} years old.`; } } class Shark extends Animal { constructor(name, age, habitat) { super(name, age, 0, 'shark', habitat); } } const john = new Shark('John', 15, 'ocean'); console.log(john);