DEV Community

Tarun Nagpal
Tarun Nagpal

Posted on • Edited on

1

Prototypal Inheritance In JavaScript

I have recently gone through some of the roots in JavaScript. It always fruitful when you look back to the basics of any Language.

There were a couple of questions in my Mind like

  • What is Prototype in JS?

  • What is Prototypal Inhertictane? How it is different from OOPS Inhertictane.

  • How does Class work in JS?

In order to get all the answers, I created a small program on both the JS versions (Es5 and ES6).

Doing a practical will give you more understanding than reading and watching videos.

So let's get started.

Inheritance in Older Version

  • Step 1

Create a function(Tile) which will act as a base class.

  • Step 2

Create a function(PushableTile) which will act as a Child class.

  • Step 3

Assign the Prototype of Base class to Child class prototype.

  • Step 4

Add methods to the child class, we will use it to access the Parent Class.

  • Step 5

Create an Object from Child Class

// Base Class 
function Tile (x,y,type){
    this.x = x;
    this.y = y;
    this.type = type;
}


// Child Class
function PushableTile(x, y, type) {
    Tile.call(this, x, y, type);
}

// Inheritence 
PushableTile.prototype = Object.create(Tile.prototype);

// Add Methods to the child class 
PushableTile.prototype.push = function(x, y) {
    this.x += x;
    this.y += y;
};

var object = new PushableTile(100,200,300);
Enter fullscreen mode Exit fullscreen mode

Inheritance in New JS Version

Step 1

Create a base class (Tile) with a constructor.

Step 2

Create a Child class with the constructor.

Step 3

Add Super to the Base Class. It will help to pass the same parameters to the Parent class.

Basically, it is doing the same thing as the below code is doing.

javascript Tile.call(this, x, y, type);

Step 4

Add methods to the Child class.

Step 5

Create an Object from Child Class

// Base Class 
class Tile {
     constructor(x,y,type){
        this.x = x;
        this.y = y;
        this.type = type;
        console.log("CONSTRUCTOR");
     }
}

// extends is same as PushableTile.prototype = Object.create(Tile.prototype);
class PushableTile extends Tile{
    constructor(x, y, type) {
      // Tile.call(this, x, y, type);
      super(x, y, type);
    }

    push(x, y) {
        this.x += x;
        this.y += y;
    }
}

const object = new PushableTile(100,200,300);
Enter fullscreen mode Exit fullscreen mode

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Top comments (2)

Collapse
 
jonrandy profile image
Jon Randy 🎖️

JS only has prototypal inheritance. What appears to be familiar class based inheritance is really only syntactic sugar on top of the prototype model underneath

Collapse
 
tarun_geek profile image
Tarun Nagpal

Yes you are right.

New JavaScript developers should have a look at this closely.

It clarify all the things under the hood.

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more

Best practices for optimal infrastructure performance with Magento

Running a Magento store? Struggling with performance bottlenecks? Join us and get actionable insights and real-world strategies to keep your store fast and reliable.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️