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,getysetllaves, se trata como un descriptor de datos. Si un descriptor tiene tantovalueowritableygetosetllaves, 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 ()








