Encapsulation Explained using JavaScript

akpevwe11

Akpevwe11

Posted on April 15, 2023

Encapsulation Explained using JavaScript

Encapsulation is one of the fundamental principles of object-oriented programming (OOP) that refers to the concept of binding the data (member variable) and the methods that operate on the data (member functions) within a single unit called a class.

Encapsulation enables programmers to hide the implementation details of one object from other objects and restrict direct access to the internal state of an object.

Encapsulation provides several benefits, such as:

  • improving the maintainability of the code -- making it easier to modify and extend the class's functionality.

  • Enhancing the security of the data by preventing unauthorized access.

  • It also allows the programmer to use the class's interface without knowing the implementation details, which makes it easier to use and understand.

let look at an example of encapsulation in JavaScript:

function createCounter() {
  let count = 0;

  function increment() {
    count++;
    console.log(count);
  }

  return increment;
}

const counter = createCounter();

counter(); // Output: 1
counter(); // Output: 2
counter(); // Output: 3


Enter fullscreen mode Exit fullscreen mode

In this example, we have a createCounter function that returns an increment function. The increment function has access to the count variable through a closure, but the count variable is not accessible from outside the function. The only way to modify the count variable is by calling the increment function, which increments the count and logs it to the console.
This is an example of encapsulation because the count variable is hidden from the outside world and can only be accessed through the increment function, which provides a well-defined interface for accessing and modifying the count.

In addition to using closures, another way to achieve encapsulation in JavaScript is by using setters and getters. Setters and getters are methods that allow us to control how properties are set and retrieved from an object.

Here's an example of encapsulation using setters and getters:

class Person {
  constructor(name, age) {
    this._name = name;
    this._age = age;
  }

  get name() {
    return this._name;
  }

  set name(newName) {
    if (typeof newName === "string") {
      this._name = newName;
    } else {
      throw new Error("Name must be a string");
    }
  }

  get age() {
    return this._age;
  }

  set age(newAge) {
    if (typeof newAge === "number" && newAge > 0) {
      this._age = newAge;
    } else {
      throw new Error("Age must be a positive number");
    }
  }
}

const person = new Person("John Doe", 30);
console.log(person.name); // Output: John Doe
console.log(person.age); // Output: 30

person.name = "Jane Doe";
person.age = 25;

console.log(person.name); // Output: Jane Doe
console.log(person.age); // Output: 25

person.name = 123; // Throws an error: Name must be a string
person.age = -1; // Throws an error: Age must be a positive number

Enter fullscreen mode Exit fullscreen mode

In this example, we have a Person class with name and age properties that are encapsulated using setters andgetters. The getters allow us to retrieve the values of these properties, while the setters allow us to control how they are set.

For instance, the name setter checks whether the new value is a string before setting the _name property, while the age setter checks whether the new value is a positive number. This allows us to enforce certain constraints on the values of these properties and ensure that they are always valid.

By encapsulating thename and age properties using setters and getters, we can hide their internal implementation and control how they are accessed and modified from outside the class. This helps to maintain the integrity of the object and prevent any unexpected side-effects that could result from direct manipulation of its properties.

In Summary, In encapsulation can be achieved through the use of closures and modules, as well as using setters and getters to control how properties are set and retrieved from an object. it also helps to improve the quality and maintainability of software systems.

💖 💪 🙅 🚩
akpevwe11
Akpevwe11

Posted on April 15, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related