Skip to content

JavaScript prototype inheritance

JavaScript prototype inheritance is a feature of the JavaScript programming language that allows objects to inherit properties and methods from other objects. It is based on the concept of prototypes, where each object has an internal link to another object called its prototype.

When you create an object in JavaScript, it is associated with a prototype. The prototype is an object that the new object inherits properties and methods from. If a property or method is not found on the object itself, JavaScript looks for it in the prototype chain until it reaches the top-level prototype, typically the Object.prototype.

To establish prototype inheritance, you can use the prototype property of a constructor function or the Object.create() method. Let’s take a look at both approaches:

1. Constructor Function and Prototype Property:

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

Person.prototype.sayHello = function() {
  console.log('Hello, my name is ' + this.name);
};

var john = new Person('John');
john.sayHello(); // Output: Hello, my name is John

In this example, the Person function acts as a constructor. The sayHello method is added to the Person.prototype object, and any instances created using the Person constructor will have access to the sayHello method through the prototype chain.

2. Object.create() Method:

var personPrototype = {
  sayHello: function() {
    console.log('Hello, my name is ' + this.name);
  }
};

var john = Object.create(personPrototype);
john.name = 'John';
john.sayHello(); // Output: Hello, my name is John

In this example, we create a personPrototype object that contains the sayHello method. Then, we use Object.create() to create a new object john with personPrototype as its prototype.

JavaScript prototype inheritance example

The syntax for setting up JavaScript prototype inheritance involves creating constructor functions and manipulating the prototype chain. Here’s a breakdown of the syntax:

1. Define the Parent Constructor Function:

function Parent() {
  // Parent properties and methods
}

2. Add Methods and Properties to the Parent’s Prototype:

Parent.prototype.methodName = function() {
  // Method implementation
};

3. Define the Child Constructor Function:

function Child() {
  // Child properties and methods
}

4. Set the Child’s Prototype to an Instance of the Parent:

Child.prototype = Object.create(Parent.prototype);

5. Reset the Constructor Property of the Child’s Prototype:

Child.prototype.constructor = Child;

6. Add Methods and Properties to the Child’s Prototype:

Child.prototype.methodName = function() {
  // Method implementation
};

Let’s put it all together in an example:

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

// Method added to the parent's prototype
Animal.prototype.sayName = function() {
  console.log('My name is ' + this.name);
};

// Child constructor function
function Dog(name, breed) {
  Animal.call(this, name); // Call parent constructor with 'this' context
  this.breed = breed;
}

// Set up prototype chain
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;

// Method added to the child's prototype
Dog.prototype.bark = function() {
  console.log('Woof!');
};

// Create instances
var animal = new Animal('Generic Animal');
animal.sayName();

var dog = new Dog('Buddy', 'Golden Retriever');
dog.sayName(); 
dog.bark();

Output:

JavaScript prototype inheritance

This concept forms the foundation of object-oriented programming in JavaScript, allowing for code organization, reusability, and the creation of class-like structures. Discover how to leverage prototype inheritance to build flexible and maintainable JavaScript applications.

Comment if you have any doubts or suggestions on this Js Inheritance topic.

Note: The All JS Examples codes are tested on the Firefox browser and the Chrome browser.

OS: Windows 10

Code: HTML 5 Version

Leave a Reply

Your email address will not be published. Required fields are marked *