Proper way to call superclass functions from subclass Proper way to call superclass functions from subclass javascript javascript

Proper way to call superclass functions from subclass


You are messing with the SubClass's prototype with the SuperClass's object, in this line

SubClass.prototype = new SuperClass();

the child's prototype should depend on the Parent's prototype. So, you can inherit like this

SubClass.prototype = Object.create(SuperClass.prototype);

Also, it is quite normal to change the constructor to the actual function, like this

SubClass.prototype.constructor = SubClass;

To keep your implementation generic, you can use Object.getPrototypeOf, to get the parent prototype in the inheritance chain and then invoke printInfo, like this

SubClass.prototype.printInfo = function() {    Object.getPrototypeOf(SubClass.prototype).printInfo(this);};

Since, info is defined in the SubClass yet, it will print undefined. You might also want to call the parent't constructor, like this

var SubClass = function() {    SuperClass.call(this);};

Note: You are creating global variables, by omitting var keyword before SuperClass and SubClass.


After reading all the answers, I am using the following inheritance mechanism:

var SuperClass = function(){    this.info = "I am superclass";    console.log("SuperClass:");};SuperClass.prototype.printInfo = function(){    console.log("printing from superclass printInfo");    console.log("printinfo");    console.log(this.info);};var SubClass = function(){    SuperClass.call(this);};SubClass.prototype = Object.create(SuperClass.prototype);SubClass.prototype.constructor = SubClass;SubClass.prototype.printInfo = function(){    console.log("calling superclass");    Object.getPrototypeOf(SubClass.prototype).printInfo.call(this);    console.log("called superclass");};var sc = new SubClass();sc.printInfo();


You can write it like this :

SuperClass.prototype.printInfo = function(){  console.log("printing from superclass printInfo");  console.log(this.info); };SubClass.prototype.printInfo = function(){  console.log("calling superclass");  SuperClass.prototype.printInfo.call(this);  console.log("called superclass");};