Home Âģ blog Âģ How JavaScript Inheritance Works – Inheritance vs ES6 Classes

How JavaScript Inheritance Works – Inheritance vs ES6 Classes

Prototypal Inheritance!
JavaScript-āĻ Object-Oriented Programming (OOP) āĻ…āĻ¨ā§āϝ āϝ⧇āϕ⧋āύ⧋ āϰ⧇āϗ⧁āϞāĻžāϰ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ (āϝ⧇āĻŽāύ Java, C++, āĻŦāĻž Python) āĻĨ⧇āϕ⧇ āϏāĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āφāϞāĻžāĻĻāĻžāĨ¤

āϤ⧁āĻŽāĻŋ āϝāĻĻāĻŋ āĻĢā§āϰāĻ¨ā§āϟāĻāĻ¨ā§āĻĄ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āύāĻŋāϝāĻŧ⧇ āϏāĻŋāϰāĻŋāϝāĻŧāĻžāϏāϞāĻŋ āĻ•āĻžāϜ āĻ•āϰ⧋, āĻŦāĻŋāĻļ⧇āώ āĻ•āϰ⧇ āĻŽāĻĄāĻžāĻ°ā§āύ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āĻ•āϗ⧁āϞ⧋āϤ⧇, āϤāĻŦ⧇ āύāĻŋāĻļā§āϚāϝāĻŧāχ āϖ⧇āϝāĻŧāĻžāϞ āĻ•āϰ⧇āϛ⧋ āϝ⧇ āĻāĻ–āĻžāύ⧇ āχāύāĻšā§‡āϰāĻŋāĻŸā§‡āĻ¨ā§āϏ⧇āϰ āĻ•āύāϏ⧇āĻĒā§āϟāϟāĻž āĻŦ⧇āĻļ āĻŸā§āϰāĻŋāĻ•āĻŋāĨ¤

 JavaScript Inheritance
JavaScript Inheritance

⧍ā§Ļā§§ā§Ģ āϏāĻžāϞ⧇ ES6-āĻ class āĻ•āĻŋ-āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄ āφāϏāĻžāϰ āĻĒāϰ āĻ…āύ⧇āϕ⧇āχ āϭ⧇āĻŦ⧇āĻ›āĻŋāϞ JavaScript āĻšāϝāĻŧāϤ⧋ āĻŸā§āĻ°ā§āϝāĻžāĻĄāĻŋāĻļāύāĻžāϞ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ-āĻ“āϰāĻŋāϝāĻŧ⧇āĻ¨ā§āĻŸā§‡āĻĄ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ āĻšāϝāĻŧ⧇ āϗ⧇āϞ⧋āĨ¤ āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāϏāϞ āϏāĻ¤ā§āϝāĻŋāϟāĻž āϕ⧀?

āϚāϞ⧋ āφāϜ āĻĢā§āϰ⧇āĻŽāĻ“āϝāĻŧāĻžāĻ°ā§āϕ⧇āϰ āĻŦāĻžāχāϰ⧇ āĻ—āĻŋāϝāĻŧ⧇ Vanilla JavaScript-āĻāϰ āφāĻ¨ā§āĻĄāĻžāϰ-āĻĻā§āϝ-āĻšā§āĻĄ āχāĻžā§āϜāĻŋāύ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇, āϤāĻžāϰ āĻāĻ•āĻĻāĻŽ āĻ—āĻ­ā§€āϰ⧇ āĻĒā§āϰāĻŦ⧇āĻļ āĻ•āϰāĻŋāĨ¤

The Core Concept: What is Prototypal Inheritance?

āϏāĻšāϜ āĻ•āĻĨāĻžāϝāĻŧ, JavaScript-āĻ āϏāĻŦāĻ•āĻŋāϛ⧁āχ āĻŽā§‚āϞāϤ ObjectāĨ¤ āϝāĻ–āύ āϤ⧁āĻŽāĻŋ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻĨ⧇āϕ⧇ āφāϰ⧇āĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡ āϕ⧋āύ⧋ āĻĒā§āϰāĻĒāĻžāĻ°ā§āϟāĻŋ āĻŦāĻž āĻŽā§‡āĻĨāĻĄ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰāϤ⧇ āϚāĻžāĻ“, āϤāĻ–āύ JS āχāĻžā§āϜāĻŋāύ āϕ⧋āύ⧋ “Class” āĻ•āĻĒāĻŋ āĻ•āϰ⧇ āύāϤ⧁āύ āĻŦā§āϞ⧁āĻĒā§āϰāĻŋāĻ¨ā§āϟ āĻŦāĻžāύāĻžāϝāĻŧ āύāĻžāĨ¤

āĻāϰ āĻŦāĻĻāϞ⧇, āϏ⧇ āϏāϰāĻžāϏāϰāĻŋ āĻāĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟāϕ⧇ āφāϰ⧇āĻ•āϟāĻŋ āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āϏāĻžāĻĨ⧇ āϞāĻŋāĻ™ā§āĻ• āĻ•āϰ⧇ āĻĻ⧇āϝāĻŧāĨ¤ āĻāχ āϞāĻŋāĻ™ā§āĻ•āĻŋāĻ‚ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽāϟāĻŋāϕ⧇āχ āĻŦāϞāĻž āĻšāϝāĻŧ Prototype ChaināĨ¤

āϧāϰ⧇ āύāĻžāĻ“, āϤ⧋āĻŽāĻžāϰ āĻ•āĻžāϛ⧇ Animal āύāĻžāĻŽā§‡āϰ āĻāĻ•āϟāĻŋ āĻŽā§‡āχāύ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āφāϛ⧇āĨ¤

āϤ⧁āĻŽāĻŋ āϝāĻ–āύ āύāϤ⧁āύ āĻāĻ•āϟāĻŋ Dog āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻŦāĻžāύāĻžāĻŦ⧇ āĻāĻŦāĻ‚ Animal-āĻāϰ āĻĢāĻŋāϚāĻžāϰāϗ⧁āϞ⧋ (āϝ⧇āĻŽāύ āĻšāĻžāρāϟāĻž āĻŦāĻž āĻ–āĻžāĻ“āϝāĻŧāĻž) āϏ⧇āĻ–āĻžāύ⧇ āĻĒ⧇āϤ⧇ āϚāĻžāχāĻŦ⧇, āϤāĻ–āύ JS āχāĻžā§āϜāĻŋāύ⧇āϰ āφāĻ¨ā§āĻĄāĻžāϰ-āĻĻā§āϝ-āĻšā§āĻĄ Dog-āĻāϰ āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ [[Prototype]] (āϝāĻžāϕ⧇ āϕ⧋āĻĄā§‡ __proto__ āĻŦāϞāĻž āĻšāϝāĻŧ) āϏāϰāĻžāϏāϰāĻŋ Animal-āϕ⧇ āĻĒāϝāĻŧ⧇āĻ¨ā§āϟ āĻ•āϰ⧇ āϰāĻžāĻ–āĻŦ⧇āĨ¤

How the JS Engine Reads It:

  • āϤ⧁āĻŽāĻŋ āϝāĻ–āύ Dog.bark() āĻ•āϞ āĻ•āϰ⧋, JS āχāĻžā§āϜāĻŋāύ āĻĒā§āϰāĻĨāĻŽā§‡ Dog āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡āϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻĒā§āϰ⧋āĻĒāĻžāĻ°ā§āϟāĻŋāϰ āϭ⧇āϤāϰ⧇ āĻŽā§‡āĻĨāĻĄāϟāĻŋ āĻ–ā§‹āρāĻœā§‡āĨ¤
  • āϝāĻĻāĻŋ āϏ⧇āĻ–āĻžāύ⧇ āύāĻž āĻĒāĻžāϝāĻŧ, āϤāĻ–āύ āϏ⧇ āĻšāĻžāϞ āϛ⧇āĻĄāĻŧ⧇ āĻĻ⧇āϝāĻŧ āύāĻžāĨ¤ āϏ⧇ āĻšā§‡āχāύ āϧāϰ⧇ āϤāĻžāϰ Prototype-āĻ (āĻ…āĻ°ā§āĻĨāĻžā§Ž Animal āĻ…āĻŦāĻœā§‡āĻ•ā§āĻŸā§‡) āĻ—āĻŋāϝāĻŧ⧇ āϖ⧁āρāϜāϤ⧇ āĻĨāĻžāϕ⧇āĨ¤
  • āĻāĻ­āĻžāĻŦ⧇ āϏ⧇ āĻ—ā§āϞ⧋āĻŦāĻžāϞ Object.prototype āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āϝāĻžāϝāĻŧāĨ¤ āĻāχ āĻĒ⧁āϰ⧋ āĻĒā§āϰāϏ⧇āϏāϟāĻŋāϕ⧇āχ āĻŦāϞāĻž āĻšāϝāĻŧ Prototypal InheritanceāĨ¤

The ES6 Illusion: Syntactic Sugar Explained

ES6 (ECMAScript 2015) āϰāĻŋāϞāĻŋāϜ āĻšāĻ“āϝāĻŧāĻžāϰ āĻĒāϰ JavaScript-āĻ class, constructor, extends, āĻāĻŦāĻ‚ super āĻ•āĻŋ-āĻ“āϝāĻŧāĻžāĻ°ā§āĻĄāϗ⧁āϞ⧋āϰ āφāĻ—āĻŽāύ āϘāĻŸā§‡āĨ¤

āĻāϟāĻž āĻĻ⧇āϖ⧇ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āĻ˛ā§āϝāĻžāĻ™ā§āϗ⧁āϝāĻŧ⧇āϜ āĻĨ⧇āϕ⧇ āφāϏāĻž āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āĻœā§€āĻŦāύ āĻ…āύ⧇āĻ• āϏāĻšāϜ āĻšāϝāĻŧ⧇ āϝāĻžāϝāĻŧ, āĻ•āĻžāϰāĻŖ āϕ⧋āĻĄ āĻĻ⧇āĻ–āϤ⧇ āĻāĻ•āĻĻāĻŽ āĻ•ā§āϞāĻŋāύ āĻāĻŦāĻ‚ āĻĒāϰāĻŋāϚāĻŋāϤ āϞāĻžāĻ—āϤ⧇ āĻļ⧁āϰ⧁ āĻ•āϰ⧇āĨ¤

āĻ•āĻŋāĻ¨ā§āϤ⧁ āφāϏāϞ āĻāĻŦāĻ‚ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āϗ⧁āϰ⧁āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āϏāĻ¤ā§āϝāϟāĻž āĻšāϞ⧋: JavaScript-āĻ āĻŸā§āĻ°ā§āϝāĻžāĻĄāĻŋāĻļāύāĻžāϞ āĻ•ā§āϞāĻžāϏ⧇āϰ āϕ⧋āύ⧋ āĻ…āĻ¸ā§āϤāĻŋāĻ¤ā§āĻŦāχ āύ⧇āχ!

ES6 Classes āĻšāϞ⧋ āĻŽā§‚āϞāϤ āĻāĻ•āϟāĻŋ “Syntactic Sugar”āĨ¤ āĻ…āĻ°ā§āĻĨāĻžā§Ž, āĻāϟāĻŋ āĻļ⧁āϧ⧁ āϕ⧋āĻĄ āϞ⧇āĻ–āĻžāϰ āĻāĻŦāĻ‚ āĻĒāĻĄāĻŧāĻžāϰ āĻāĻ•āϟāĻŋ āϏ⧁āĻ¨ā§āĻĻāϰ āĻŽā§‹āĻĄāĻŧāĻ• āĻŽāĻžāĻ¤ā§āϰāĨ¤

āϤ⧁āĻŽāĻŋ āϝāĻ–āύ class āϞāĻŋāϖ⧇ āϕ⧋āĻĄ āϰāĻžāύ āĻ•āϰ⧋, āĻŦāĻŋāĻšāĻžāχāĻ¨ā§āĻĄ-āĻĻā§āϝ-āϏāĻŋāύ⧇ JS āχāĻžā§āϜāĻŋāύ āϏ⧇āχ āĻ•ā§āϞāĻžāϏāϗ⧁āϞ⧋āϕ⧇āĻ“ āϭ⧇āϙ⧇ āϏ⧇āχ āĻĒ⧁āϰ⧋āύ⧋ Prototypal Inheritance-āĻāχ āĻ•āύāĻ­āĻžāĻ°ā§āϟ āĻ•āϰ⧇ āĻāĻ•ā§āϏāĻŋāĻ•āĻŋāωāϟ āĻ•āϰ⧇āĨ¤

Code Comparison: Prototypal Approach vs Modern ES6 Syntax

āĻŦāĻŋāώāϝāĻŧāϟāĻŋ āφāϰāĻ“ āĻ•ā§āϞāĻŋāϝāĻŧāĻžāϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ āϚāϞ⧋ āĻāĻ•āχ āĻ•āĻžāϜ āĻĻ⧁āχāĻ­āĻžāĻŦ⧇ āĻ•āϰ⧇ āĻĻ⧇āĻ–āĻŋāĨ¤ āφāĻŽāϰāĻž āĻāĻ•āϟāĻŋ Animal āϤ⧈āϰāĻŋ āĻ•āϰāĻŦā§‹ āĻāĻŦāĻ‚ āϏ⧇āĻ–āĻžāύ āĻĨ⧇āϕ⧇ Dog āχāύāĻšā§‡āϰāĻŋāϟ āĻ•āϰāĻŦā§‹āĨ¤

1. The Old Way (Prototypal Inheritance):

āĻāĻ–āĻžāύ⧇ āφāĻŽāϰāĻž āĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ āĻšā§‡āχāύ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻŦā§‹āĨ¤

JavaScript

// Parent Constructor
function Animal(name) {
  this.name = name;
}

// Adding method to prototype
Animal.prototype.eat = function() {
  console.log(this.name + " is eating.");
};

// Child Constructor
function Dog(name, breed) {
  Animal.call(this, name); // Inheriting properties
  this.breed = breed;
}

// Linking Prototypes (The Magic!)
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

Dog.prototype.bark = function() {
  console.log(this.name + " says woof!");
};

const myDog = new Dog("Buddy", "Golden Retriever");
myDog.eat();  // Output: Buddy is eating.
myDog.bark(); // Output: Buddy says woof!

2. The Modern Way (ES6 Classes):

āĻāĻ•āχ āĻ•āĻžāϜ āĻŽāĻĄāĻžāĻ°ā§āύ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ⧇ āĻ•āϤ⧋āϟāĻž āĻ•ā§āϞāĻŋāύ āĻĻ⧇āĻ–āĻžāϝāĻŧ, āϏ⧇āϟāĻž āϖ⧇āϝāĻŧāĻžāϞ āĻ•āϰ⧋āĨ¤

JavaScript

// Parent Class
class Animal {
  constructor(name) {
    this.name = name;
  }

  eat() {
    console.log(`${this.name} is eating.`);
  }
}

// Child Class using 'extends'
class Dog extends Animal {
  constructor(name, breed) {
    super(name); // Inheriting properties
    this.breed = breed;
  }

  bark() {
    console.log(`${this.name} says woof!`);
  }
}

const myDog = new Dog("Buddy", "Golden Retriever");
myDog.eat();  // Output: Buddy is eating.
myDog.bark(); // Output: Buddy says woof!

āĻŽāϜāĻžāϰ āĻŦā§āϝāĻžāĻĒāĻžāϰ āĻšāϞ⧋, āϤ⧁āĻŽāĻŋ āϝāĻĻāĻŋ typeof Dog āĻ•āύāϏ⧋āϞ⧇ āĻšā§‡āĻ• āĻ•āϰ⧋, āĻĻ⧇āĻ–āĻŦ⧇ āωāĻ¤ā§āϤāϰ āφāϏāϛ⧇ "function"! āĻ•āĻžāϰāĻŖ āĻ•ā§āϞāĻžāϏ āφāϏāϞ⧇ āĻ¸ā§āĻĒ⧇āĻļāĻžāϞ āϧāϰāύ⧇āϰ āĻĢāĻžāĻ‚āĻļāύ āĻ›āĻžāĻĄāĻŧāĻž āφāϰ āĻ•āĻŋāϛ⧁āχ āύāĻžāĨ¤

Head-to-Head Comparison: Prototype vs Class

āĻĢāĻŋāϚāĻžāϰPrototypal InheritanceES6 Classes
āϕ⧋āĻĄāĻŋāĻ‚ āĻ¸ā§āϟāĻžāχāϞāĻĢāĻžāĻ‚āĻļāύ āĻāĻŦāĻ‚ Object.create() āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻŽā§āϝāĻžāύ⧁āϝāĻŧāĻžāϞāĻŋ āĻšā§‡āχāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤class, extends, super āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϖ⧁āĻŦ āϏāĻšāĻœā§‡āχ āϞ⧇āĻ–āĻž āϝāĻžāϝāĻŧāĨ¤
āφāĻ¨ā§āĻĄāĻžāϰ-āĻĻā§āϝ-āĻšā§āĻĄāĻāϟāĻŋāχ JavaScript-āĻāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āĻāĻŦāĻ‚ āύ⧇āϟāĻŋāĻ­ āĻŦāĻŋāĻšā§‡āĻ­āĻŋāϝāĻŧāĻžāϰāĨ¤āĻāϟāĻŋ Prototypal āĻĒā§āϝāĻžāϟāĻžāĻ°ā§āύ⧇āϰ āωāĻĒāϰ āϤ⧈āϰāĻŋ āĻāĻ•āϟāĻŋ āϞ⧇āϝāĻŧāĻžāϰ āĻŦāĻž “Syntactic Sugar”āĨ¤
āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻāĻ•ā§āϏāĻĒ⧇āϰāĻŋāϝāĻŧ⧇āĻ¨ā§āϏāĻāĻ•āϟ⧁ āĻŸā§āϰāĻŋāĻ•āĻŋ, āĻŦ⧁āĻāϤ⧇ āϏāĻŽāϝāĻŧ āϞāĻžāϗ⧇āĨ¤ āĻ…āύ⧇āĻ• āĻŦāϝāĻŧāϞāĻžāϰāĻĒā§āϞ⧇āϟ āϕ⧋āĻĄ āϞāĻŋāĻ–āϤ⧇ āĻšāϝāĻŧāĨ¤āĻŸā§āĻ°ā§āϝāĻžāĻĄāĻŋāĻļāύāĻžāϞ OOP āĻŦā§āϝāĻžāĻ•āĻ—ā§āϰāĻžāωāĻ¨ā§āĻĄ āĻĨ⧇āϕ⧇ āφāϏāĻž āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰāĻĻ⧇āϰ āϜāĻ¨ā§āϝ āϖ⧁āĻŦāχ āĻ•ā§āϞāĻŋāύ āĻ“ āχāωāϜāĻžāϰ-āĻĢā§āϰ⧇āĻ¨ā§āĻĄāϞāĻŋāĨ¤
HoistingāĻĢāĻžāĻ‚āĻļāύ āĻĄāĻŋāĻ•ā§āϞāĻžāϰ⧇āĻļāύ āĻšā§‹āχāĻ¸ā§āĻŸā§‡āĻĄ (Hoisted) āĻšāϝāĻŧ, āϤāĻžāχ āφāϗ⧇ āĻ•āϞ āĻ•āϰāϞ⧇āĻ“ āĻ•āĻžāϜ āĻ•āϰ⧇āĨ¤āĻ•ā§āϞāĻžāϏ āĻĄāĻŋāĻ•ā§āϞāĻžāϰ⧇āĻļāύ āĻšā§‹āχāĻ¸ā§āĻŸā§‡āĻĄ āĻšāϝāĻŧ āύāĻž (ReferenceError āĻĻāĻŋāĻŦ⧇), āϤāĻžāχ āφāϗ⧇ āĻĄāĻŋāĻĢāĻžāχāύ āĻ•āϰāϤ⧇ āĻšāϝāĻŧāĨ¤

Performance and Memory Management: Why It Matters

āϤ⧁āĻŽāĻŋ āϝāĻ–āύ āĻŦāĻĄāĻŧ āϕ⧋āύ⧋ āĻ“āϝāĻŧ⧇āĻŦ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ (āϝ⧇āĻŽāύ React āĻŦāĻž Next.js āĻĻāĻŋāϝāĻŧ⧇ āϤ⧈āϰāĻŋ āϕ⧋āύ⧋ āĻĄā§āϝāĻžāĻļāĻŦā§‹āĻ°ā§āĻĄ) āĻŦāĻžāύāĻžāĻšā§āϛ⧋, āϤāĻ–āύ āĻĒāĻžāϰāĻĢāϰāĻŽā§āϝāĻžāĻ¨ā§āϏ āϖ⧁āĻŦ āĻŽā§āϝāĻžāϟāĻžāϰ āĻ•āϰ⧇āĨ¤

Prototypal āĻšā§‡āχāύ⧇āϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦāĻĄāĻŧ āϏ⧁āĻŦāĻŋāϧāĻž āĻšāϞ⧋ āĻŽā§‡āĻŽāϰāĻŋ āĻāĻĢāĻŋāĻļāĻŋāϝāĻŧ⧇āĻ¨ā§āϏāĻŋāĨ¤ āϤ⧁āĻŽāĻŋ āϝāĻĻāĻŋ ā§§ā§Ļā§Ļā§Ļ āϟāĻž Dog āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻŦāĻžāύāĻžāĻ“, eat() āĻŦāĻž bark() āĻŽā§‡āĻĨāĻĄāϗ⧁āϞ⧋ āĻ•āĻŋāĻ¨ā§āϤ⧁ ā§§ā§Ļā§Ļā§Ļ āĻŦāĻžāϰ āĻŽā§‡āĻŽāϰāĻŋāϤ⧇ āϤ⧈āϰāĻŋ āĻšāϝāĻŧ āύāĻžāĨ¤

āĻāϗ⧁āϞ⧋ āĻļ⧁āϧ⧁ āĻŽā§‡āχāύ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ⧇ āĻāĻ•āĻŦāĻžāϰāχ āĻĨāĻžāϕ⧇, āφāϰ āϏāĻŦāϗ⧁āϞ⧋ āĻ…āĻŦāĻœā§‡āĻ•ā§āϟ āĻļ⧁āϧ⧁ āϏ⧇āχ āĻāĻ•āϟāĻž āĻŽā§‡āĻĨāĻĄāϕ⧇āχ āĻļ⧇āϝāĻŧāĻžāϰ āĻ•āϰ⧇āĨ¤ ES6 āĻ•ā§āϞāĻžāϏāĻ“ āφāĻ¨ā§āĻĄāĻžāϰ-āĻĻā§āϝ-āĻšā§āĻĄ āϝ⧇āĻšā§‡āϤ⧁ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒāχ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āϤāĻžāχ āĻāϟāĻŋāĻ“ āϏāĻŽāĻžāύāĻ­āĻžāĻŦ⧇ āĻŽā§‡āĻŽāϰāĻŋ āĻ…āĻĒā§āϟāĻŋāĻŽāĻžāχāϜāĻĄāĨ¤

Which One Should You Use?

āφāϧ⧁āύāĻŋāĻ• āĻ“āϝāĻŧ⧇āĻŦ āĻĄā§‡āϭ⧇āϞāĻĒāĻŽā§‡āĻ¨ā§āϟ āĻāĻŦāĻ‚ āϟāĻŋāĻŽā§‡āϰ āϏāĻžāĻĨ⧇ āĻ•āĻžāϜ āĻ•āϰāĻžāϰ āĻ•ā§āώ⧇āĻ¤ā§āϰ⧇ ES6 Classes āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻžāχ āĻšāϞ⧋ āχāĻ¨ā§āĻĄāĻžāĻ¸ā§āĻŸā§āϰāĻŋ āĻ¸ā§āĻŸā§āϝāĻžāĻ¨ā§āĻĄāĻžāĻ°ā§āĻĄāĨ¤ āĻāϰ āϏāĻŋāύāĻŸā§āϝāĻžāĻ•ā§āϏ āĻ…āύ⧇āĻ• āĻ•ā§āϞāĻŋāύ, āϰāĻŋāĻĄā§‡āĻŦāϞ āĻāĻŦāĻ‚ āĻŦāĻžāĻ—-āĻĢā§āϰāĻŋ āϕ⧋āĻĄ āϞāĻŋāĻ–āϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤

āϤāĻŦ⧇, āĻāĻ•āϜāύ āϏāϞāĻŋāĻĄ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻšāĻŋāϏ⧇āĻŦ⧇ Prototypal Inheritance āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻž āϜāĻžāύāĻž āϤ⧋āĻŽāĻžāϰ āϜāĻ¨ā§āϝ āĻŽāĻžāĻ¸ā§āϟāĨ¤

āĻ•āĻžāϰāĻŖ āϝāĻ–āύ āϕ⧋āύ⧋ āĻĨāĻžāĻ°ā§āĻĄ-āĻĒāĻžāĻ°ā§āϟāĻŋ āϞāĻžāχāĻŦā§āϰ⧇āϰāĻŋ āĻŦāĻž āϞāĻŋāĻ—ā§āϝāĻžāϏāĻŋ āϕ⧋āĻĄāĻŦ⧇āϏ āĻĄāĻŋāĻŦā§āϝāĻžāĻ— āĻ•āϰāϤ⧇ āϝāĻžāĻŦ⧇, āϤāĻ–āύ āĻ•ā§āϞāĻžāϏ⧇āϰ āĻāϟāĻžāϰ āĻĒ⧇āĻ›āύ⧇āϰ āφāϏāϞ āĻĒā§āϰ⧋āĻŸā§‹āϟāĻžāχāĻĒ āĻšā§‡āχāύāϟāĻžāχ āϤ⧋āĻŽāĻžāϕ⧇ āϏāĻ˛ā§āϝ⧁āĻļāύ āĻŦ⧇āϰ āĻ•āϰ⧇ āĻĻāĻŋāĻŦ⧇āĨ¤

Summary:

While JavaScript introduced class syntax in ES6 to mimic traditional Object-Oriented Programming, it remains a prototype-based language at its core. ES6 Classes are essentially “syntactic sugar” over JavaScript’s native Prototypal Inheritance. This means that when you write a class, the JS engine still links objects together using the hidden prototype chain (__proto__) under the hood. Ultimately, while the modern ES6 class syntax offers a cleaner and more readable way to structure your applications, mastering the underlying prototype mechanism is crucial for debugging complex issues and truly understanding how JavaScript operates.

All Tech Update

Technology āĻāϰ āϏāĻ•āϞ āφāĻĒāĻĄā§‡āϟ āϏāĻŦāĻžāϰ āφāϗ⧇ āĻŦāĻŋāĻ¸ā§āϤāĻžāϰāĻŋāϤ āĻĒ⧜⧁āύ –

Scroll to Top