JavaScript Inheritance and Classes

12.05.19

In many programming languages implemented inheritance. And it also exists in JavaScript. First, consider prototype inheritance.

We describe the function constructor

function Animal(name, weight, color){
 
    this.name = name || 'someAnimal';
    this.weight = weight;
    this.color = color;
 
    //do some actions during initialization
    console.log(this.name + ' construct animal');
}
 
// write the method to the prototype
Animal.prototype.sayName = function(){
    console.log(this.name);
}

We describe the constructor function that inherits the Animal class. And we will expand it, we will add in addition own properties and methods

function Mammal(name, weight, color, limbs){
    Animal.apply(this, arguments);
    this.limbs = limbs || 4;
    console.log(this.name + ' construct mammal');
}
 
Mammal.prototype = Object.create(Animal.prototype);
Mammal.prototype.constructor = Mammal;
 
Mammal.prototype.run = function(){
    console.log('run');
}

Create instances of these classes.

let bird = new Animal('bird', 1, 'black');
let cat = new Mammal('Murzik', 2, 'white', 3);

Check which class cat object belongs to.

console.log(cat instanceof Mammal);// true
console.log(cat instanceof Animal);// true

Now we will do almost the same, just use the syntax of ES6. And also consider the static methods of the class.

class Animal {
 
    constructor(name = 'someAnimal', weight, color){
 
        this.name = name;
        this.weight = weight;
        this.color = color;
 
        // do some actions during initialization
        console.log(this.name + ' construct animal');
    }
 
    sayName(){
        console.log(this.name);
    }
 
    // create the static method
    static getEyes(){
        return 2;
    }
}

We describe a class that inherits Animal and add additional properties and methods

class Mammal extends Animal{
    constructor(name, weight, color, limbs = 4){
 
        // call the parent constructor
        super(name, weight, color);
 
        this.limbs = limbs;
        console.log(this.name + ' construct mammal');
    }
 
    run(){
        console.log('run');
    }
}

Create instances of these classes.

let bird = new Animal('bird', 1, 'black');
let cat = new Mammal('Murzik', 2, 'white', 3);

Check which class cat object belongs to.

console.log(cat instanceof Mammal); //true
console.log(cat instanceof Animal); //true

Call the static getEyes method for the Animal class.

console.log(Animal.getEyes()); //2

As you can see to describe the method does not need to use the word function. And the parent constructor is called by the super keyword. Calling this without calling super() will fail

blog comments powered by Disqus