Object.defineProperty () de JavaScript

El método JavaScript Object.defineProperty () agrega o modifica la propiedad existente en un objeto y devuelve el objeto.

La sintaxis del defineProperty()método es:

 Object.defineProperty(obj, prop, descriptor)

El defineProperty()método, al ser un método estático, se llama utilizando el Objectnombre de la clase.

Parámetros de defineProperty ()

El defineProperty()método incluye:

  • obj: el objeto en el que se define la propiedad.
  • prop: el nombre o Symbolla propiedad que se va a definir o modificar.
  • descriptor: descriptor de la propiedad que se está definiendo o modificando.

Los descriptores de propiedad presentes en los objetos son de dos tipos: descriptores de datos y descriptores de acceso. Pueden tener las siguientes propiedades opcionales.

  • configurable
  • enumerable

Los descriptores de datos también pueden tener:

  • value
  • writable

Los descriptores de acceso también pueden tener:

  • get
  • set

Valor de retorno de defineProperty ()

  • Devuelve el objeto que se pasó a la función.

Nota:

  • De forma predeterminada, los valores agregados mediante Object.defineProperty()son inmutables y no enumerables.
  • Si un descriptor tiene ninguno de los dos value, writable, gety setllaves, se trata como un descriptor de datos. Si un descriptor tiene tanto valueo writabley geto setllaves, se produce una excepción.

Ejemplo: agregar una propiedad de datos al objeto

 let obj = (); // with a data property descriptor Object.defineProperty(obj, "property1", ( value: 788, writable: true, enumerable: true, configurable: true, )); console.log(obj.property1); // 788 // with an accessor property descriptor Object.defineProperty(obj, "property2", ( get() ( console.log("Getting Value… "); return val; ), set(newVal) ( console.log("Setting Value… "); val = newVal; ), enumerable: true, configurable: true, )); obj.property2 = 6969; // Setting Value… console.log(obj.property2); // 6969

Salida

 788 Configuración de valor … Obteniendo valor … 6969

No podemos mezclar descriptores de propiedades de acceso y datos, ya que arrojaría un error.

Para modificar una propiedad, la propiedad del objeto writabledebe ser true, de lo contrario, no modificará ni arrojará un error en modo estricto.

El enumerableatributo de propiedad define si la propiedad es seleccionada por un Object.assign()operador de propagación.

El configurableatributo controla al mismo tiempo si la propiedad se puede eliminar del objeto y si sus atributos (distintos de valuey writable) se pueden cambiar.

Lectura recomendada: Objeto JavaScript defineProperties ()

Articulos interesantes...