https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_b964594d3d957944241961017b9eb19bf02834de44cce93d8e67dd306852dbe346167181e455e33d5268ea01d973d77bb056848546f31794f31a4c31a9da5aa3.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_23f1ae74c634d7e5e0a067c22b7a8c2d79c3ffd9a3b9395fc82c1b3b99635552b994f1f72f532f28ceaff1ea054ea026cd488cd62fa03a4ad91d212b5f3c5a72.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_451c3884f51125f7687e5bb07cfab033c04cb7174c33f93213b2af4bad2af13cf48b92a7fa95fc86d7d436f355938a3ac50aa119cdb7c9b6d5a52815c3e6033e.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bfff9e63e857e9ee612e292d4a6edf3ced64d6a756925c953a9d8f77845ff601eca64d73dfa48756b1a9f4a4d6de6127a273bcde16ddeb71a22383460f4e94b0.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f4dd7e1d73ae5eda35ed5ad6aa965b612dbf483ece3ca50c1e8e30ad8dff1c66a160ed75e958e2db399661d229874783e0834ad813a479437035666b8e9e3386.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4fce0769137d4cd096989b0349bc3c2bbfca79ac311fdf714c41ab24d87551c7b49b756c8a8de090b0714a0ad0560e49fa532ba5a88875ea4afd78efac464df6.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_85cec8b07d60426b11040e471babca0d2f9c8dc87a9b56e06cad39828f7f67179e29609100f282a574872c9a93fb635b25416300eb4c97bc5a653d00cf6f8dbf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_6768e5a27d4d357347338621c0d20bd269b126d30eec796193390f2f530fbaea60af84130c46f9786114be65149e661e87d55c339219c90aa76396d7e5b734ef.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_2acd6bdff3b680341e8c727da5169a647123eb8fd0a90253161b4c3af272c15d293bf9bb217008bb13f84d1910b0e166798001f8603b6c026d5c20a76c41d47c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_50b3d87139824dcd693b928733375f88143dcd5f6cf1c08a8170c46d91edce4b36ca3298f79cfa45039722f4cf91e8a75703184682787a08898c40152e87c9b0.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_268c9bba6ba649318f0da28c37b09a9bbfa371210f9b6b52faa7fd8ae94abf6b3c3bfeb5df5705c93495ce1152ca58aeabc435d6c6c1bd959025165c3f50e086.js
  • Skip to main content
  • Skip to primary sidebar
  • Skip to footer
  • Home
  • Featured
    • Advanced Python Topics
    • AWS Learning Roadmap
    • JWT Complete Guide
    • Git CheatSheet
  • Explore
    • Programming
    • Development
      • microservices
      • Front End
    • Database
    • DevOps
    • Productivity
    • Tutorial Series
      • C# LinQ Tutorials
      • PHP Tutorials
  • Dev Tools
    • JSON Formatter
    • Diff Checker
    • JWT Decoder
    • JWT Generator
    • Base64 Converter
    • Data Format Converter
    • QR Code Generator
    • Javascript Minifier
    • CSS Minifier
    • Text Analyzer
  • About
  • Contact
CodeSamplez.com

CodeSamplez.com

Programming And Development Resources

You are here: Home / Programming / JavaScript Inheritance: Ultimate Guide to OOP in Javascript

JavaScript Inheritance: Ultimate Guide to OOP in Javascript

Updated May 18, 2025 by Rana Ahsan 1 Comment ⏰ 6 minutes

javascript inheritance

We are going to dive deep into one of the most powerful concepts in JavaScript – inheritance. Whether you’re just starting out or looking to sharpen your skills, this guide will absolutely transform how you approach object-oriented programming in JavaScript.

Why JavaScript Inheritance Matters (Still)

Even with all the modern JavaScript frameworks and libraries we have today, understanding inheritance remains crucial for writing clean, maintainable code. Trust me, this concept isn’t going anywhere – it’s the foundation of how objects relate to each other in your applications.

JavaScript has evolved dramatically since I first wrote about this topic, but inheritance continues to be a cornerstone concept that separates novice developers from the pros. The language now offers multiple ways to implement inheritance, and knowing which approach to use can dramatically improve your code quality

JavaScript Inheritance: The Complete Picture

JavaScript inheritance has evolved significantly over the years. Let’s explore both the traditional prototype-based approach and the modern class-based syntax.

Prototype-Based Inheritance

The prototype chain is the original JavaScript inheritance mechanism. Every JavaScript object has a prototype from which it inherits properties and methods.

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

Animal.prototype.makeSound = function() {
  return "Some generic sound";
};

// Child "class"
function Dog(name, breed) {
  // Call the parent constructor
  Animal.call(this, name);
  this.breed = breed;
}

// Set up inheritance
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog; // Fix the constructor pointer

// Override parent method
Dog.prototype.makeSound = function() {
  return "Woof!";
};

// Add a method specific to Dog
Dog.prototype.fetch = function() {
  return `${this.name} is fetching the ball!`;
};

const rex = new Dog("Rex", "German Shepherd");
console.log(rex.name); // "Rex"
console.log(rex.makeSound()); // "Woof!"
console.log(rex.fetch()); // "Rex is fetching the ball!"Code language: JavaScript (javascript)

This approach works perfectly, but the syntax can be a bit verbose and confusing. This is why ES6 introduced class syntax.

Modern Class-Based Inheritance (ES6+)

ES6 classes provide a cleaner, more familiar syntax for creating objects and implementing inheritance. Under the hood, they still use prototypes, but the syntax is much more intuitive:

class Animal {
  constructor(name) {
    this.name = name;
  }
  
  makeSound() {
    return "Some generic sound";
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name); // Call parent constructor
    this.breed = breed;
  }
  
  // Override parent method
  makeSound() {
    return "Woof!";
  }
  
  // Add a method specific to Dog
  fetch() {
    return `${this.name} is fetching the ball!`;
  }
}

const rex = new Dog("Rex", "German Shepherd");
console.log(rex.name); // "Rex"
console.log(rex.makeSound()); // "Woof!"
console.log(rex.fetch()); // "Rex is fetching the ball!"Code language: JavaScript (javascript)

Isn’t that much cleaner? The extends keyword sets up the prototype chain for you, and the super keyword calls the parent class constructor.

Advanced Inheritance Techniques

The Prototype Chain in Depth

Understanding how the prototype chain works is essential for mastering JavaScript inheritance. When you access a property or method on an object, JavaScript looks for it in the object itself. If it doesn’t find it, it looks in the object’s prototype, then that prototype’s prototype, and so on up the chain until it reaches Object.prototype.

const animal = new Animal("Generic Animal");
console.log(animal.__proto__ === Animal.prototype); // true
console.log(Animal.prototype.__proto__ === Object.prototype); // true

const dog = new Dog("Buddy", "Golden Retriever");
console.log(dog.__proto__ === Dog.prototype); // true
console.log(Dog.prototype.__proto__ === Animal.prototype); // trueCode language: JavaScript (javascript)

Multiple Inheritance and Mixins

JavaScript doesn’t support multiple inheritance directly, but you can achieve similar functionality using mixins:

// Mixin - a collection of methods
const swimMixin = {
  swim() {
    return `${this.name} is swimming`;
  }
};

const flyMixin = {
  fly() {
    return `${this.name} is flying`;
  }
};

// Apply mixins to a class
Object.assign(Dog.prototype, swimMixin);

const buddy = new Dog("Buddy", "Labrador");
console.log(buddy.makeSound()); // "Woof!"
console.log(buddy.swim()); // "Buddy is swimming"Code language: JavaScript (javascript)

Practical Inheritance Patterns

The Factory Pattern

The factory pattern creates objects without exposing the instantiation logic:

function createAnimal(type, name) {
  const animal = { name };
  
  if (type === "dog") {
    return Object.assign(animal, {
      makeSound() { return "Woof!"; },
      fetch() { return `${name} is fetching`; }
    });
  } else if (type === "cat") {
    return Object.assign(animal, {
      makeSound() { return "Meow!"; },
      climb() { return `${name} is climbing`; }
    });
  }
  
  return animal;
}

const rex = createAnimal("dog", "Rex");
console.log(rex.makeSound()); // "Woof!"Code language: JavaScript (javascript)

The Constructor Pattern

The constructor pattern uses constructor functions to create specific types of objects:

function Animal(name) {
  this.name = name;
}

function Dog(name, breed) {
  Animal.call(this, name);
  this.breed = breed;
}

// Set up inheritance
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;Code language: JavaScript (javascript)

The Module Pattern

The module pattern allows for privacy through closures:

const AnimalModule = (function() {
  // Private variables
  const privateData = {};
  
  // Public API
  return {
    createAnimal(name) {
      const id = Date.now();
      privateData[id] = { health: 100 };
      
      return {
        name,
        getHealth() {
          return privateData[id].health;
        },
        decreaseHealth(amount) {
          privateData[id].health -= amount;
        }
      };
    }
  };
})();

const animal = AnimalModule.createAnimal("Mystery Creature");
console.log(animal.getHealth()); // 100
animal.decreaseHealth(20);
console.log(animal.getHealth()); // 80Code language: JavaScript (javascript)

Best Practices for JavaScript Inheritance

  1. Favor composition over inheritance – Instead of deep inheritance hierarchies, compose objects from smaller, reusable parts.
  2. Keep the prototype chain shallow – Deep prototype chains can lead to performance issues.
  3. Use ES6 classes for cleaner syntax – They make your code more readable and easier to maintain.
  4. Be consistent with your approach – Don’t mix different inheritance patterns in the same codebase.
  5. Document your inheritance structure – Make sure other developers can understand the relationships between your objects.

Common Inheritance Pitfalls and How to Avoid Them

Forgetting to Call the Parent Constructor

When extending a class, always call the parent constructor using super() in ES6 classes or ParentClass.call(this, ...) in the traditional approach.

Modifying the Built-in Prototypes

Modifying prototypes of built-in objects like Array or Object can lead to unpredictable behavior and conflicts with libraries. Avoid this practice!

// Don't do this!
Array.prototype.first = function() {
  return this[0];
};Code language: JavaScript (javascript)

Confusion Between __proto__ and prototype

Remember that prototype is a property of constructor functions, while __proto__ (or Object.getPrototypeOf()) accesses the prototype of an instance.

Conclusion: Mastering JavaScript Inheritance

JavaScript inheritance is a powerful tool that helps you write cleaner, more maintainable code. Whether you prefer the traditional prototype-based approach or the modern class syntax, understanding these concepts will make you a better JavaScript developer.

The patterns and techniques we’ve explored are used in countless JavaScript libraries and frameworks, so mastering them will help you read and contribute to a wider range of codebases. MDN Documentation is also very good read to learn more.

What’s your favorite inheritance pattern? Have any questions about implementing these techniques in your own projects? Drop a comment below, and I’d be happy to help!

Share if liked!

  • Click to share on Facebook (Opens in new window) Facebook
  • Click to share on X (Opens in new window) X
  • Click to share on LinkedIn (Opens in new window) LinkedIn
  • Click to share on Pinterest (Opens in new window) Pinterest
  • Click to share on Reddit (Opens in new window) Reddit
  • Click to share on Tumblr (Opens in new window) Tumblr
  • Click to share on Pocket (Opens in new window) Pocket

You may also like


Discover more from CodeSamplez.com

Subscribe to get the latest posts sent to your email.

First Published On: November 22, 2014 Filed Under: Programming Tagged With: javascript, oop

About Rana Ahsan

Rana Ahsan is a seasoned software engineer and technology leader specialized in distributed systems and software architecture. With a Master’s in Software Engineering from Concordia University, his experience spans leading scalable architecture at Coursera and TopHat, contributing to open-source projects. This blog, CodeSamplez.com, showcases his passion for sharing practical insights on programming and distributed systems concepts and help educate others.
Github | X | LinkedIn

Reader Interactions

Trackbacks

  1. Object-Oriented JavaScript Class Basics - CodeSamplez says:
    October 11, 2024 at 1:00 PM

    […] you liked this article, you might also like this one on Javascript static methods as well. Keep in touch! Happy […]

    Reply

Leave a ReplyCancel reply

Primary Sidebar

  • Facebook
  • X
  • Pinterest
  • Tumblr

Subscribe via Email

Top Picks

python local environment setup

Python Local Development Environment: Complete Setup Guide

In-Depth JWT Tutorial Guide For Beginners

JSON Web Tokens (JWT): A Complete In-Depth Beginners Tutorial

The Ultimate Git Commands CheatSheet

Git Commands Cheatsheet: The Ultimate Git Reference

web development architecture case studies

Web Development Architecture Case Studies: Lessons From Titans

static website deployment s3 cloudfront

Host Static Website With AWS S3 And CloudFront – Step By Step

Featured Dev Tools

  • Diff Checker
  • JWT Decoder

Recently Published

service worker framework integration

Service Workers in React: Framework Integration Guide

service worker caching strategies

Service Worker Caching Strategies: Performance & Offline Apps

service worker lifecycle

Service Worker Lifecycle: Complete Guide for FE Developers

what is service worker

What Is a Service Worker? A Beginner’s Guide

Dynamic Typing In Python

Dynamic Typing in Python: A Comprehensive Guide For Beginners

Footer

Subscribe via Email

Follow Us

  • Facebook
  • X
  • Pinterest
  • Tumblr

Explore By Topics

Python | AWS | PHP | C# | Javascript

Copyright © 2025

https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_a94b725603ff2a9fb24c47bd937b0e1ed1e5132d80c9597341fc64b6db0161ee04f68f385d83fb66b955d3460554dd5b47d7392f99ca8edf994521bcefbc8721.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_c402e38f1879c18090377fb6b73b15ac158be453ecda3a54456494fe8aba42b990c293bae5424e5643d52515ffc2067e0819995be8d07d5bba9107a96780775c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_ffc3511227531cc335353c54c3cbbaa11d0b80e5cb117478e144436c13cd05495b67af2e8950480ed54dbdabcdcef497c90fdb9814e88fe5978e1d56ce09f2cf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_d57da9abfef16337e5bc44c4fc6488de258896ce8a4d42e1b53467f701a60ad499eb48d8ae790779e6b4b29bd016713138cd7ba352bce5724e2d3fe05d638b27.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_edc0e9ef106cc9ef7edd8033c5c6fcff6dc09ee901fd07f4b90a16d9345b35a06534f639e018a64baaf9384eee1df305570c1ecad747f41b787b89f53839962b.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bc2182bb3de51847c8685df18692deda654dbf90fb01b503eb1bb0b68b879a051b91f30a9210ed0b2ba47c730db14b159cd9391ffdcd7117de397edd18366360.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_dccc492dbbfdac33d1411f9df909e849c7268fcf99b43007f278cde3a0adc0ae00e8cae5ec81cf255b9a6eae74e239ba1fa935572af77173219cb081f7d2327d.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_00bacf9e36181aac2b666d110cd9d82257f846766e7041b2d7b3c909b458982931ccc9b203e37098fbdfcf43ca359cf04e3824a724a6789fc204196d3a72ad29.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_65d41e8acf8460659d5800381e03c2a9dd52ec71287a6f20307e1eb7da27691a8e74e4408e23656afa7b5bd74b82697984fd2b1d4501251c6e73c6a935b6b92f.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_aa5a5d229b421633f4247380e1e8c0a4854f82efb35d13a5b07b7b8fbe22e98842a580f063e5965345a51c477a7f5c2585edf8dd7d896b2438dc61f91d8d970c.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_bb8058a9e234a7ffaa98891b1df7f6b8e67410e6984568b151daa05113b8c7f89d7b5918ae73f020998a16f7f5a087a13d6a9a5e5d7c301e2ca12fd9d1f8d177.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_647fb67570c6108fb10ae6785a1abdbecac99ffcf80351d0bef17c3cf783dce497b1895fcdaae997dacc72c359fbfb128cc1540dd7df56deb4961e1cd4b22636.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f7a298a0f1f754623fe3b30f6910ce2c1373f715450750bd7a391571812b00df1917e2be90df6c4efc54dbdfda8616278a574dea02ba2c7a31992768df8db334.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_df30604d5842ef29888c3c1881220dc6d3f8854666d94f0680c5f38aa643c5fb79b10eb9f10998d8856eb24ca265783195937434fd6c2bb8e4846df0277a7fb7.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f17fe6fb0993f1703181d7ae9e9ea570f3d33a43afd6f2a4567daa1a6745698c7b8193dc72d50991d2dd87cd3dcf663959206607d193a9b57926d061a1f50aef.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_945dcbab2c2a131f3c90f4fb91776b76066d589f84fb55bff25cd5d79a56218000616bfca1f0af9a74f32348693707af49e8fe624de8aa34f1e1c5b6a25709cf.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_65820d252e1b93596de6697fd5f02483f3e2524a0696c7d698b64745edb32bf5831a90e556842f5f88c8209766cc78ca3a41cf783d20236a9f90d4a7ea7b3e72.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_7286884797a1210857e2a36f8ab46604b0034b6abf512380447a5763c873db6a72b8547f660053de0ea69faef1eb64878f39ff4b0ea86c963efab95764a3bf5b.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_cbcf6c279ac6c6a25ae138bf964e64a5fd90d22dcdf8a53b6fe7b72cefa51063bfb0181a6e50dd2acdcae2795619887d1d83b10461e44e5103be756f2588d837.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_47965bc586b95810c925b9df3314e0c9a5cd121e70ca0831f87df0bc034695de4f83ecf2def86f737e14614ee138794473cf32cd3082a5d38db9dec0c1f266fa.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_12aa201cea075846d266536aa222d64d4088b851d87f55dac5e611b77add6826c8ebc6e82650fcd1a9e88a05a0072dedd195719c5f64cd4580a0acd8aee05d92.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_eaa93529c38925eb07368c361382956fbd910b5106b8589fa7e2e15a59c46437de3698d50ec4754bc45e6dfac47b3f41cc4c6112d7ede071ca8950385d4987dc.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_547a9be12b729e07fc6e3534256ecbcbbfaa9dd1ff3280440f7fb9fbb332f93bfec3070c82946f2893bb154aa5f7778202f2e087d4b56b7e93c95586c2b6dfc9.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_d87ea86dd0e7ecdd5fe7a5bb67becf943e57c3add866b456034d51663d099031bd563e12f61fdccc044969adf938a8584ed22ccd401ab8b669e20e4f92fb54e8.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_35311c3d71a3605fad4e1d6b50f3911311cdcc46418bdf56d6d0308a75a69585269ee7582a335e29989adf308fa1a81a10a2c2d4e257e9d680447a4996f6269e.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_f4fc182ef03c12e9dcadd6febc3dbaa4a29134469057ca9e8ec0be2f2de29a494514ff4b59798e74debf26f78b2df2b3e2665c69b77035761fb463b783202915.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_85c0f2769456e60153b0fd8364b82a035da53384f62de342d9bdca806f3f1ea56486919a00497a18d457949c82bf8bfacc4423fc332074ddf71a49a8fe628fff.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_67f99bef3678c549a14b5f2ff790cce6aba338dca29020755444231b45fa0f980f795e3658496ba70739a099b47b22bc2eab564343ac6132309de3adbbae3455.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_09eecfdd96206ed13830b4b93cfb2cc75cd38083671a34194437b5734b5bb38712209dc335b07e3266ceb3c3a44a155b9bbe5f3e0e1105b19dd45d3def76f020.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_4c089fbdb88e3b624a6f884d3ba1bf606f003bfcd3742376d0d353cd62181dc663aa3811a56361c3100de488fc4d6595a50de2b26f058921ba74f5f2c1b5be00.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_897ff6ac314c5f5e0f496c6af624bd9abf296a02cb5aeb850b9220b6dc3ce2fc4004cb02ed8b59d59d4b9c9d90f050d6eebc1d08ecaebab2f671f7d9367e6410.js
https://codesamplez.com/wp-content/cache/breeze-minification/js/breeze_67d1e619e71d36ae00ddcf85ee18628bb4eb64fcb3d6119b463e75cb987013420a21136d19cd03e6634ccc01cfa9af4a357930e4cf6900953b7812efb4f249fb.js