DEV Community

Cover image for The Constructor Chronicles: Unraveling the Secrets of JavaScript Object Creation
Philip Case
Philip Case

Posted on

The Constructor Chronicles: Unraveling the Secrets of JavaScript Object Creation

NERD JOKE:
Why did the JavaScript constructor go broke?
Because it couldn't stop calling new and creating objects!

On a more serious note:

JavaScript constructors play a crucial role in object-oriented programming by providing a blueprint for creating objects with predefined properties and behaviors. In this technical article, we will dive into the concept of constructors, their purpose, and explore practical use cases to demonstrate their power. So, grab your coding tools and let's unravel the world of JavaScript constructors.

Defining Constructors:
At its core, a constructor in JavaScript is a special function that is used to create and initialize objects. It is called when a new instance of an object is created using the new keyword. Constructors define the initial state and behavior of objects, allowing for consistent object creation and encapsulation of data.

The Journey of a JavaScript Constructor Call

When a JavaScript constructor gets called, an intriguing sequence of events takes place behind the scenes. Let's unravel the journey of a constructor call and gain a deeper understanding of the process.

Object Creation:
When a constructor is invoked with the new keyword, a new empty object is created. This object serves as the basis for the instance being constructed.

Prototype Linkage:
The newly created object is then linked to its constructor's prototype. This linkage establishes the inheritance chain, enabling the object to access properties and methods defined in the constructor's prototype.

Constructor Execution:
Next, the constructor function itself is executed. The this keyword inside the constructor refers to the newly created object. This allows us to set initial properties and define behaviors for the instance.

Property Assignment:
During the constructor's execution, properties can be assigned directly to the object using the this keyword. These properties become unique to each instance, allowing for individual state management.

Implicit Return:
By default, constructors in JavaScript do not have an explicit return statement. Instead, the newly created object is implicitly returned at the end of the constructor call. This allows us to capture the instance and assign it to a variable.

Object Initialization:
Once the constructor call completes, the object is fully initialized and ready to be utilized in our code. We can interact with the instance, access its properties, and invoke its methods.

Understanding this journey of a constructor call helps us grasp the inner workings of JavaScript's object-oriented paradigm. It highlights the steps involved in creating instances, establishing prototype linkages, and setting up initial state.

By leveraging this knowledge, we can design constructors that encapsulate the necessary logic to initialize objects correctly. We can create instances with the desired properties and behaviors, paving the way for robust and scalable JavaScript applications.

So, the next time you invoke a JavaScript constructor, remember the journey it embarks upon - from object creation to initialization - shaping the foundation of your object-oriented code.

Situational Use Case Examples:

Creating a Person Object:

Image description

Javascript Example Code Snippet:

_function Person(name, age) {
this.name = name;
this.age = age;
}

const john = new Person('John Doe', 30);
console.log(john.name); // Output: John Doe
console.log(john.age); // Output: 30_

Building a Car Object:

Image description

Javascript Example Code Snippet:

_function Car(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
this.start = function() {
console.log(Starting ${this.make} ${this.model});
};
}

const myCar = new Car('Toyota', 'Camry', 2022);
console.log(myCar.make); // Output: Toyota
console.log(myCar.model); // Output: Camry
console.log(myCar.year); // Output: 2022
myCar.start(); // Output: Starting Toyota Camry_

Constructing a Product Object:

Image description

Javascript Example Code Snippet:

function Product(name, price) {
this.name = name;
this.price = price;
this.discountedPrice = function(discount) {
return this.price - (this.price * (discount / 100));
};
}

const laptop = new Product('Laptop', 1200);
console.log(laptop.name); // Output: Laptop
console.log(laptop.price); // Output: 1200
console.log(laptop.discountedPrice(10)); // Output: 1080

To further illustrate the concepts of JavaScript constructors, let's dive into some practical examples to hit this home.

Using the "this" Keyword:
Constructors utilize the this keyword to refer to the object being created. By assigning properties to this, we ensure that each instance has its own unique set of properties. For example:

Image description

Javascript Example Code Snippet:

_function Car(make, model) {
this.make = make;
this.model = model;
}

const myCar = new Car('Toyota', 'Camry');
console.log(myCar.make); // Output: Toyota
console.log(myCar.model); // Output: Camry

_

Create Multiple Objects:
Constructors allow us to create multiple instances with shared behaviors defined in the prototype. Here's an example:

Image description

Javascript Example Code Snippet:

_function Person(name, age) {
this.name = name;
this.age = age;
}

Person.prototype.greet = function() {
console.log(Hello, my name is ${this.name});
};

const person1 = new Person('John', 25);
const person2 = new Person('Jane', 30);

person1.greet(); // Output: Hello, my name is John
person2.greet(); // Output: Hello, my name is Jane
_

Constructor with Parameters:
Constructors can accept parameters to initialize object properties. Here's an example that demonstrates a constructor with parameters:

Image description

Javascript Example Code Snippet:

_function Book(title, author) {
this.title = title;
this.author = author;
}

const myBook = new Book('The Alchemist', 'Paulo Coelho');
console.log(myBook.title); // Output: The Alchemist
console.log(myBook.author); // Output: Paulo Coelho
_

Constructor vs Object Literal:
Using constructors provides a structured way to create multiple instances with shared properties and methods, as opposed to object literals. Here's a comparison:

Image description

Javascript Example Code Snippet:

_// Constructor
function Rectangle(width, height) {
this.width = width;
this.height = height;
}

const rect = new Rectangle(10, 5);

// Object Literal
const rectLiteral = {
width: 10,
height: 5
};
_

Object Prototype:
Constructors leverage the prototype object to define shared methods and properties among instances. This promotes memory efficiency by avoiding redundant function definitions. Here's an example:

Image description

Javascript Example Code Snippet:

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

Person.prototype.greet = function() {
console.log(Hello, my name is ${this.name});
};

const person = new Person('John');
person.greet(); // Output: Hello, my name is John
_

Built-in Constructors:
JavaScript provides built-in constructors for common types, such as String, Array, and Date. These constructors allow us to create instances of their respective types. For example:

Image description

Javascript Example Code Snippet:

const str = new String('Hello');
const arr = new Array(1, 2, 3);
const date = new Date();

These examples showcase the versatility and power of JavaScript constructors. By using the this keyword, defining parameters, and working with prototypes, we can create custom objects with unique properties and behaviors.

WRAP-UP:

JavaScript constructors are fundamental in creating and initializing objects with predefined properties and behaviors. They enable the creation of reusable code and provide consistency in object creation. By leveraging constructors, you can easily create objects tailored to specific use cases. So, harness the power of constructors in your JavaScript projects and unleash the potential of object-oriented programming.

Philip Case is a Full-Stack Developer as well as a Certified Ethical Hacker (CEH).

With an undergraduate degree in Finance and Information Systems from the prestigious University of Washington in Seattle, Philip laid the foundation for his remarkable career. He further honed his skills and deepened his knowledge with a Master of Science degree in Finance and Statistics from Seattle University in 1996. These educational accomplishments provided him with a solid framework to excel in the ever-evolving landscape of technology.

Philip's insatiable appetite for growth led him to undertake the MIT Coding Bootcamp, a rigorous 16-week full-time program, which he successfully completed in 2022. This intensive training propelled his expertise in full-stack software development to new heights. You can explore his exceptional achievement through his Post Graduate Certificate in Full-Stack Software Development, which you can find here.
https://certificates.emeritus.org/2621caae-c01a-4c24-a410-23ec071f8054

Not only is Philip a trailblazer in the world of technology, but he is also a Certified Ethical Hacker (CEH) from the EC Council, a testament to his commitment to ethical practices and secure coding. His deep understanding of cybersecurity enables him to navigate complex systems with integrity and protect organizations from malicious threats.

My Other Blogs:
https://medium.com/@philipbcase
https://medium.com/@av8innovations

Top comments (0)