Hello! Today's journey ventures into the cornerstone of JavaScript's object-oriented fundamentals: Encapsulation. This concept establishes a protective barrier around an object's data, keeping it untouched by the external code ecosystem. Let's take a closer look:
- The importance of encapsulation: Delivering robust, versatile, and intuitive code.
- Private Data: How JavaScript protects certain data from external access.
- Getters and Setters: These are the tools that control data access and modification for the protection and abstraction of data.
Encapsulation fulfills a threefold role: it maintains integrity, controls data modification, and provides data abstraction — interfaces accessible to users. Think about using a cell phone — you interact with an interface without meddling with its circuits. Following this same logic, encapsulation safeguards the internal implementation while exposing safe interfaces.
Now, let's talk about Private Data: In modern JavaScript, we create private properties by prefixing the variable name with a hash symbol (#). Unlike regular properties, these cannot be accessed or modified from outside the class. Let's illustrate this with a Car class, introducing a private attribute, #speed:
A Note on Conventions: You may encounter older code using an underscore (
_speed) to denote private data. This was a "gentleman's agreement" among developers to stay away from that data. However, the modern#notation is strictly enforced by the JavaScript engine itself.
Getters and Setters are gatekeepers controlling access to private data. In our Car class, a getter function retrieves the #speed attribute. In contrast, a setter function modifies it as follows:
These methods allow us to retrieve or set the car's speed safely while the actual #speed variable remains hidden.
