Descubre cómo usar Object.defineProperty() en JavaScript
Aprende a controlar las propiedades de objetos y mejorar el rendimiento de tus proyectos
Object.defineProperty() es una función en JavaScript que te permite definir y controlar las propiedades de un objeto, incluyendo su tipo, accesibilidad y configurabilidad. Esta función puede ser útil en situaciones donde deseas proteger o limitar el acceso a ciertas propiedades de un objeto, o cuando necesitas controlar cómo se leen y escritas las propiedades de un objeto.
1. Ejemplo: Propiedad solo lectura
const obj = { name: 'John' };
Object.defineProperty(obj, 'name', {
get: function() {
return this.name;
},
set: function(value) {
throw new Error('Nombre solo lectura');
}
});
Ejemplo: En este caso, se define una propiedad «name» en el objeto que solo puede ser leída y no modificada. Si intentamos asignar un valor a la propiedad «name», lanzará un error.
2. Ejemplo: Propiedad con validación personalizada
const obj = { age: 0 };
Object.defineProperty(obj, 'age', {
get: function() {
return this.age;
},
set: function(value) {
if (value < 0 || value > 120) {
throw new Error('Edad debe estar entre 0 y 120');
}
this.age = value;
}
});
Ejemplo: En este caso, se define una propiedad «age» en el objeto con una validación personalizada para la propiedad. Si intentamos asignar un valor a la propiedad «age» que esté fuera del rango de 0 a 120, lanzará un error.
3. Ejemplo: Propiedad con valores por defecto
const obj = { name: '' };
Object.defineProperty(obj, 'age', {
value: 25,
writable: true,
enumerable: false,
configurable: true
});
Ejemplo: En este caso, se define una propiedad «age» en el objeto con un valor por defecto de 25. Esta propiedad es solo escriturable y no enumerable, lo que significa que no se verá en un bucle for…in, pero se puede leer y modificar.
4. Ejemplo: Propiedad con valores múltiples
const obj = { name: 'John' };
Object.defineProperty(obj, 'age', {
value: 25,
get: function() {
return this.value + ' años';
},
set: function(value) {
this._age = value;
}
});
Ejemplo: En este caso, se define una propiedad «age» en el objeto con un valor por defecto de 25. Además, se utiliza la función get para que cuando se lea la propiedad «age», devuelva el valor junto con los años. También se define una propiedad privada «_age» que se puede usar internamente.
5. Ejemplo: Propiedad con valores múltiples y validación
const obj = { name: 'John' };
Object.defineProperty(obj, 'age', {
value: 25,
get: function() {
return this._age;
},
set: function(value) {
if (value < 0 || value > 120) {
throw new Error('Edad debe estar entre 0 y 120');
}
this._age = value;
},
configurable: true,
enumerable: false
});
Ejemplo: En este caso, se define una propiedad «age» en el objeto con un valor por defecto de 25. Además, se utiliza la función get para que cuando se lea la propiedad «age», devuelva el valor privado «_age». También se utiliza la función set con una validación personalizada para la propiedad «age». La propiedad es solo enumerable y no configurable, lo que significa que no se puede eliminar ni cambiar los atributos de configurabilidad.
Conclusión
Utilizar Object.defineProperty() puede mejorar la seguridad y rendimiento de tus proyectos en JavaScript. Asegúrate de entender los diferentes tipos de accesibilidad y configurabilidad, y prueba implementar esta función en tus próximos proyectos para ver cómo puedes mejorar la seguridad y control sobre las propiedades de tus objetos.

