DEV Community

김영민
김영민

Posted on

Mastering JavaScript Inheritance with Prototypes

Understanding JavaScript Prototypes

JavaScript prototypes are a fundamental concept in object-oriented programming, providing a mechanism for inheritance. Unlike class-based languages, JavaScript uses prototype-based inheritance, allowing objects to inherit properties and methods from other objects.

What are Prototypes?

In JavaScript, every object has an internal [[Prototype]] property that references its parent object. When accessing a property on an object, if it doesn't exist, the prototype chain is searched for that property.

Prototype Chain

The prototype chain is a series of objects referencing each other, allowing for continuous searching of properties. If the chain is traversed and the property is still not found, undefined is returned. Object.prototype is the top-most prototype that all objects reference.

Setting Prototypes

Objects can set their prototypes using the prototype property.

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

// Set the greet method on the Person prototype
Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}`);
};

const person1 = new Person('Alice', 30);
person1.greet(); // "Hello, my name is Alice"
Enter fullscreen mode Exit fullscreen mode

Utilizing Prototypes

Prototypes are useful for:

  • Inheritance: Sharing common functionality among multiple objects.
  • Method sharing: Saving memory by sharing methods among objects.
  • Class-based inheritance: Defining classes and methods using prototypes.

Prototype Chain Example

Here's an example of a prototype chain:

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

Animal.prototype.sayHello = function() {
  console.log(`Hello, I'm a(n) ${this.name}`);
};

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

Dog.prototype = Object.create(Animal.prototype);  // Set Dog's prototype to Animal's
Dog.prototype.constructor = Dog;  // Update the constructor

const dog = new Dog('Dog');
dog.sayHello();  // "Hello, I'm a(n) Dog"
Enter fullscreen mode Exit fullscreen mode

Implicit Prototype Chain

If you don't explicitly set a prototype chain, JavaScript will default to Object.prototype. However, to share new methods, you need to explicitly set the prototype or use inheritance.

Best Practices

  • Avoid creating overly deep prototype chains, as they can impact performance.
  • Only add necessary methods and properties to prototypes, and avoid unnecessary inheritance.

In conclusion, understanding JavaScript prototypes is crucial for effective object-oriented programming. By leveraging prototypes, you can create more efficient, scalable, and maintainable code. Remember to use prototypes judiciously and follow best practices to avoid potential performance issues.

Top comments (0)