Object property descriptors are attributes that describe the configuration of a specific object property. For example, to create an object property "foo" that does not appear in enumeration of object's properties you would set the enumeration
descriptor as false
like so:
const obj = { bar: 'baz' }; const objDescriptor = { value: 'bar', enumerable: false }; Object.defineProperty(obj, 'foo', objDescriptor); for (const prop in obj) { console.log(prop); // 'bar' }
Based on the property descriptors, an object property can be concluded as being either a data property or an accessor property. Both data and accessor property descriptors are objects that have the following keys/descriptors in common:
enumerable
— iftrue
, the property will show up during enumeration of the object properties;configurable
— iffalse
, it prevents deletion of the property as well as any changes to the object property's descriptors.
In addition to those, a data property has the following descriptors:
value
— any value that's associated with the property;writable
— iftrue
, the propertyvalue
can be reassigned.
In contrast, an accessor property has the following descriptors in addition to the common ones between the two:
get
— a getter function for the property;set
— a setter function for the property.
You can use the following methods to specify data and accessor property descriptors:
Object.create()
— used to create a new object (using an existing object as the prototype of the newly created object); it allows specifying data descriptors for each property you add to the object;Object.defineProperty()
— used to define (or modify) a single object property with option to specify data descriptors;Object.defineProperties()
— used to define (or modify) multiple object properties with option to specify data descriptors.
You can use the following methods to get details of data and accessor property descriptors:
Object.getOwnPropertyDescriptor()
— returns an object with property descriptors for a specific object property (that's directly present on an object and not in the object's prototype chain);Object.getOwnPropertyDescriptors()
— returns all own property descriptors for a given object.
This post was published by Daniyal Hamid. Daniyal currently works as the Head of Engineering in Germany and has 20+ years of experience in software engineering, design and marketing. Please show your love and support by sharing this post.