I am trying to explore JS classes and I am getting error if I am not calling super()
.
ReferenceError: Must call super constructor in derived class before accessing ‘this’ or returning from derived constructor
My requirement is that I just want to call the constructor of the child class. Can I do that?
class Employee {
constructor() {
console.log("I am an employee")
}
}
class Learner extends Employee {
constructor() {
console.log("I am a learner")
}
}
var learner = new Learner();
2
Answers
This is not possible and goes against OOP principles.
To access the same methods and properties in both Employee and Learner without invoking the other’s constructor, create a parent class named something like "Person" with separate constructors for Employee and Learner.
So,
Employee extends Person
andLearner extends Person
. Then, place the shared methods and attributes inside Person.As you create a
Learner
instance, you create anEmployee
instance. It is expected that the constructor is run when you create a class instance.If you have scenarios where you don’t want to run the code in that constructor, then apparently that code is not really code that is essential for the construction of the object and should be moved elsewhere.
For instance, like this:
Or, make the
Employee
constructor more generic so it does what you need for any subclassed instance as well. For instance,