Question 32
Question
Can you explain how to use Symbols as private properties in ES6 classes?
Answer
Symbols are perfect for creating private properties within ES6 classes. Here's a breakdown of how they work:
The Problem with Traditional Private Properties:
No True Privacy: In plain JavaScript, methods like
_property
(using an underscore prefix) aren't truly private. They can be accessed and modified from outside the class if someone really tries.Limited Encapsulation: This lack of strong privacy makes it harder to maintain code integrity and enforce intended behavior.
Symbols to the Rescue!
Unique Identifiers: Symbols create unique, non-enumerable keys that are ideal for private properties. Since they're not part of the standard object enumeration, they're hidden from casual inspection.
Symbol()
Function: UseSymbol()
to generate a new symbol.
Example Implementation:
Explanation:
Symbol as Key: We use
Symbol('balance')
to create a unique symbol key. This becomes our private property identifier.Setting and Accessing Values: Inside the class constructor, we assign an initial balance using this symbol key. When we need to get or modify the balance later (e.g., in
deposit
,withdraw
, orgetBalance
), we access it through the same symbol key.
Benefits:
Strong Privacy: Symbols make it much harder for external code to directly manipulate private properties, protecting your class's internal state.
Improved Encapsulation: Private properties reinforce the principles of encapsulation, making your classes more robust and maintainable.
Last updated