Private properties
Defining private properties
Private properties in JavaScript are defined by prefixing the property name with a hash (#
). This syntax ensures that the property cannot be accessed or modified directly from outside the class.
js
class SmartLight {
#brightness // declare private property
constructor(color, brightness) {
this.color = color
this.#brightness = brightness
this.isOn = false
}
}
const bathroomLight = new SmartLight('amber', 50)
console.log(bathroomLight)
console
SmartLight { isOn: false }
Notice that the brightness
property is not logged to the console.
Private properties cannot be accessed directly
If we try and modify these properties directly, we will get an error:
js
bathroomLight.#brightness = 90
console
bathroomLight.#brightness = 90
^
SyntaxError: Private field '#color' must be declared in an enclosing class
Using private properties
Since private properties cannot be accessed directly from outside the class, we need to provide public methods to work with them.
js
class SmartLight {
#brightness
constructor(color, brightness) {
this.color = color
this.#brightness = brightness
}
getBrightness() {
if (this.isOn) {
return this.#brightness
} else {
return 0
}
}
setBrightness(newBrightness) {
if (newBrightness < 0 || newBrightness > 100) {
throw new Error('Brightness must be between 0 and 100')
}
this.#brightness = newBrightness
}
}