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 Object
nombre 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
Symbol
la 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
,get
yset
llaves, se trata como un descriptor de datos. Si un descriptor tiene tantovalue
owritable
yget
oset
llaves, 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 writable
debe ser true
, de lo contrario, no modificará ni arrojará un error en modo estricto.
El enumerable
atributo de propiedad define si la propiedad es seleccionada por un Object.assign()
operador de propagación.
El configurable
atributo controla al mismo tiempo si la propiedad se puede eliminar del objeto y si sus atributos (distintos de value
y writable
) se pueden cambiar.
Lectura recomendada: Objeto JavaScript defineProperties ()