Object.defineProperty()
Object.defineProperty()
Section titled “Object.defineProperty()”Introduction
Section titled “Introduction”Object.defineProperty() lets you define or modify a property with fine-grained control over its descriptor attributes.
Syntax
Section titled “Syntax”Object.defineProperty(obj, propertyName, descriptor);Example
Section titled “Example”const user = {};
Object.defineProperty(user, 'id', { value: 12345, writable: false, // cannot change enumerable: false, // hidden from iteration configurable: false // cannot be deleted});
console.log(user.id); // 12345user.id = 999; // ❌ Fails silently (strict: throws)console.log(Object.keys(user)); // [] — not enumerableGetters and Setters
Section titled “Getters and Setters”const user = { _name: 'Alice'};
Object.defineProperty(user, 'name', { get() { return this._name.toUpperCase(); }, set(value) { this._name = value.trim(); }, enumerable: true});
user.name = ' bob ';console.log(user.name); // 'BOB'Use Cases
Section titled “Use Cases”- Hiding internal properties (
enumerable: false) - Creating read-only properties (
writable: false) - Implementing computed properties (getters/setters)
- Library/Framework internal APIs
Summary
Section titled “Summary”Object.defineProperty()gives full control over property behavior- Use
writable: falsefor constants - Use
enumerable: falseto hide properties - Use getters/setters for computed or validated properties