JavaScriptProgramación

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.

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.