JavaScript Introducing ES2015 Classes Sub-Classes

Przemyslaw Mazur
PRO
Przemyslaw Mazur
Pro Student 9,296 Points

Passing more arguments to the super function.

class Person {
  dance() {
    const dances = [
      'waltz',
      'tango',
      'mambo',
      'foxtrot'
    ];
    console.log(`${this.name} is doing the ${dances[Math.floor(Math.random() * dances.length)]}!`);
  };
  constructor({ name, age, eyeColor} = {}) {
    this.name = name;
    this.age = age;
    this.eyeColor = eyeColor;
  }
}

class Student extends Person {
  dance (traditional){
    if(traditional){
     super.dance();
     return;
    }
    const dances = [
      'lyrical',
      'tap',
      'samba',
      'jazz'
    ];
    console.log(`${this.name} is doing the ${dances[Math.floor(Math.random() * dances.length)]}!`);
   }


  constructor({ name, age, interestLevel = 5 } = {} ) {
    super({name, age, eyeColor});
    this.name = name;
    this.age = age;
    this.interestLevel = interestLevel;
    this.grades = new Map;
  };
}

let stevenJ = new Student({ name: 'Steven', age: 22, eyeColor: 'blue'});
stevenJ.dance();
console.log(stevenJ.eyeColor)

I want the Student class to inherit the eyeColor property form the Person class so I have removed its default value and added it to the super function but when I pass it to the constructor I'm getting undefined.

1 Answer

Steven Parker
Steven Parker
172,267 Points

To be able to pass it through to the "super" call, the constructor for "Student" needs to accept the eye color as one of the properties of the construction object:

  constructor({ name, age, eyeColor, interestLevel = 5 } = {}) {