Last updated at 2023-09-22

What is __proto__ Property in JavaScript

AI Status
Last Edit By
Last edited time
Sep 22, 2023 04:26 PM
Sep 22, 2023


JavaScript's __proto__ property is a fascinating feature for both beginner and seasoned developers.
It allows you to peek into an object's prototype and modify it, which is vital for understanding JavaScript's unique prototype-based inheritance model.
In this article, we'll explore __proto__, its practical use cases, and alternatives that are more suitable for production code.

Understanding Prototypes in JavaScript

Before we dive into __proto__, let's quickly revisit JavaScript's prototype-based inheritance.
In JavaScript, every object has a prototype, which is essentially another object it inherits properties and methods from.
This inheritance is achieved through the prototype chain, where objects link to their prototypes.
const parentObject = { greeting: 'Hello!' }; const childObject = {}; childObject.__proto__ = parentObject; // Set childObject's prototype to parentObject console.log(childObject.greeting); // Outputs 'Hello!'
Here, childObject inherits the greeting property from its prototype, parentObject.

Exploring the __proto__ Property

The __proto__ property allows you to access an object's prototype directly:
const childObject = {}; console.log(childObject.__proto__); // Outputs the prototype of childObject
It's essential to note that __proto__ is not part of the official JavaScript specification (ECMAScript), but it is supported in modern browsers and used mainly for educational purposes.

Modifying an Object's Prototype

One exciting aspect of __proto__ is that you can dynamically change an object's prototype:
const parentObject = { greeting: 'Hello!' }; const childObject = {}; console.log(childObject.greeting); // Outputs undefined childObject.__proto__ = parentObject; console.log(childObject.greeting); // Outputs 'Hello!'
In this example, childObject initially lacks a greeting property, but by setting its __proto__ to parentObject, it inherits the greeting property.
While this can be educational, it's not recommended for production code. Instead, consider these alternatives:

Alternative 1: Object.create()

You can create objects with specific prototypes using Object.create():
const parentObject = { greeting: 'Hello!' }; const childObject = Object.create(parentObject); console.log(childObject.greeting); // Outputs 'Hello!'

Alternative 2: Object.setPrototypeOf()

Use Object.setPrototypeOf() to set an object's prototype:
const parentObject = { greeting: 'Hello!' }; const childObject = {}; Object.setPrototypeOf(childObject, parentObject); console.log(childObject.greeting); // Outputs 'Hello!'
These methods offer more predictable and maintainable ways to work with prototypes in your code.


The __proto__ property in JavaScript is a powerful tool for exploring and manipulating an object's prototype.
While it's informative for learning about prototype-based inheritance, it's generally not recommended for production code.
Instead, leverage Object.create() and Object.setPrototypeOf() to work with prototypes more effectively.
Understanding prototypes is crucial for harnessing JavaScript's object-oriented features and writing efficient and robust code.
Happy coding!

Discussion (0)

Related Posts