JavaScript Property Descriptors
An explanation of property descriptors and what they are useful for
Any object in JavaScript has a set of properties, and each of these properties has a descriptor.
This is an object that defines a property behavior and own properties.
Many Object static methods interact with it. Those methods include:
Object.create()
Object.defineProperties()
Object.defineProperty()
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptors()
Here is an example of a property descriptor object:
{
value: 'Something'
}
This is the simplest one. value
is the property value, in a key-value definition. This key
is defined as the object key, when you define this property in an object:
{
breed: {
value: 'Siberian Husky'
}
}
Example:
const animal = {}
const dog = Object.create(animal, {
breed: {
value: 'Siberian Husky'
}
});
console.log(dog.breed) //'Siberian Husky'
You can pass additional properties to define each different object property:
- value: the value of the property
- writable: true the property can be changed
- configurable: if false, the property cannot be removed nor any attribute can be changed, except its value
- enumerable: true if the property is enumerable
- get: a getter function for the property, called when the property is read
- set: a setter function for the property, called when the property is set to a value
writable
, configurable
and enumerable
set the behavior of that property. They have a boolean value, and by default those are all false
.
Example:
const animal = {}
const dog = Object.create(animal, {
breed: {
value: 'Siberian Husky',
writable: false
}
});
console.log(dog.breed) //'Siberian Husky'
dog.breed = 'Pug' //TypeError: Cannot assign to read only property 'breed' of object '#<Object>'
→ I wrote 17 books to help you become a better developer, download them all at $0 cost by joining my newsletter
→ JOIN MY CODING BOOTCAMP, an amazing cohort course that will be a huge step up in your coding career - covering React, Next.js - next edition February 2025