DEV Community

Cover image for Deep Dive into Constructors and Prototypes in JavaScript
Jafaru Emmanuel
Jafaru Emmanuel

Posted on

Deep Dive into Constructors and Prototypes in JavaScript

Constructors and prototypes are fundamental concepts in JavaScript's object-oriented programming (OOP).
To gain a broader understanding of JavaScript and write efficient, maintainable code, it's essential to explore how constructors and prototypes work together.
In this article, we shall take a deep dive into constructors and prototypes, covering their role, relationship, and practical applications in JavaScript.

Understanding Constructors

In JavaScript, a constructor is a special function used to create and initialize objects.
It serves as a blueprint for creating multiple objects with similar properties and methods.
Constructors are a cornerstone of OOP, enabling the creation of objects that share common characteristics.

Creating Constructors

To create a constructor, you define a function that follows certain conventions. By convention, constructor names are capitalized to distinguish them from regular functions.

//javascript

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}
Enter fullscreen mode Exit fullscreen mode

In this example, we've defined a Person constructor with two parameters, firstName and lastName. The this keyword is used to refer to the current instance of the object being created. When you call new Person(...), a new Person object is created and initialized with the provided arguments.

Creating Objects with Constructors

To create objects from constructors, you use the new keyword followed by the constructor function:

//javascript

const person1 = new Person('John', 'Doe');
const person2 = new Person('Jane', 'Smith');
Enter fullscreen mode Exit fullscreen mode

person1 and person2 are two distinct instances created from the Person constructor. They have their own firstName and lastName properties.

Introducing Prototypes

Prototypes are a core concept in JavaScript and are closely related to constructors.
A prototype is an object that serves as a template for other objects.
It contains properties and methods that objects created from the constructor can access.
This allows sharing functionality and conserving memory.

Prototypes in Constructors

Constructors have a property called prototype, which is an object that serves as the prototype for instances created from that constructor. You can add methods and properties to the prototype to make them accessible to all instances.

//javascript

Person.prototype.fullName = function() {
  return `${this.firstName} ${this.lastName}`;
};

console.log(person1.fullName()); // 'John Doe'
console.log(person2.fullName()); // 'Jane Smith'
Enter fullscreen mode Exit fullscreen mode

In this example, we added a fullName method to the Person prototype. This method is now available to all instances created from the Person constructor.

The Prototype Chain

JavaScript employs a prototype chain to look up properties and methods. If a property or method is not found in an object, JavaScript looks in the object's prototype. This continues until the property or method is found or until the prototype chain ends with the Object prototype.

Inheritance with Constructors and Prototypes

In JavaScript, inheritance is achieved through prototypes. Objects can inherit properties and methods from other objects, enabling the creation of more complex and specialized objects.

Constructor Inheritance

You can use constructors to establish an inheritance relationship. A child constructor can call the parent constructor using call or apply and inherit properties from the parent.

//javascript

function Student(firstName, lastName, studentId) {
  Person.call(this, firstName, lastName);
  this.studentId = studentId;
}
Enter fullscreen mode Exit fullscreen mode

In this example, the Student constructor inherits the firstName and lastName properties from the Person constructor. This is known as constructor chaining.

Prototype Inheritance

To inherit methods and properties from the prototype of another constructor, you set the child constructor's prototype to an instance of the parent constructor.

//javascript

Student.prototype = Object.create(Person.prototype);
Enter fullscreen mode Exit fullscreen mode

Now, Student instances inherit methods from both Person and Student prototypes.

Conclusion

Constructors and prototypes are essential concepts in JavaScript's object-oriented programming.
They allow you to create and manage objects efficiently, enabling code reusability and sharing of methods and properties.

Understanding how constructors and prototypes work together is crucial for writing organized, maintainable, and efficient code.
When used effectively, these concepts provide a foundation for building complex and powerful JavaScript applications while keeping your codebase clean and DRY (Don't Repeat Yourself).

Top comments (0)