O método JavaScript Object.defineProperty () adiciona ou modifica a propriedade existente em um objeto e retorna o objeto.
A sintaxe do defineProperty()
método é:
Object.defineProperty(obj, prop, descriptor)
O defineProperty()
método, sendo um método estático, é chamado usando o Object
nome da classe.
Parâmetros defineProperty ()
O defineProperty()
método inclui:
- obj - O objeto no qual definir a propriedade.
- prop - O nome ou
Symbol
da propriedade a ser definida ou modificada. - descriptor - o descritor da propriedade que está sendo definida ou modificada.
Os descritores de propriedade presentes em objetos são de dois tipos: descritores de dados e descritores de acesso. Eles podem ter as seguintes propriedades opcionais.
configurable
enumerable
Os descritores de dados também podem ter:
value
writable
Um descritor de acessador também pode ter:
get
set
Valor de retorno de defineProperty ()
- Retorna o objeto que foi passado para a função.
Nota:
- Por padrão, os valores adicionados usando
Object.defineProperty()
são imutáveis e não enumeráveis. - Se um descritor não tem nem de
value
,writable
,get
eset
chaves, ele é tratado como um descritor de dados. Se um descritor tem tantovalue
ouwritable
eget
ouset
chaves, uma exceção é lançada.
Exemplo: Adicionando uma propriedade de dados ao 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
Resultado
788 Definindo valor… Obtendo valor… 6969
Não podemos misturar dados e descritores de propriedade do acessador, pois isso geraria um erro.
Para modificar uma propriedade, a propriedade do objeto writable
deve ser true
, caso contrário, ele não modificará e gerará erro no modo estrito.
O enumerable
atributo property define se a propriedade é escolhida Object.assign()
ou espalhada pelo operador.
O configurable
atributo controla ao mesmo tempo se a propriedade pode ser excluída do objeto e se seus atributos (diferentes de value
e writable
) podem ser alterados.
Leitura recomendada: objeto Javascript defineProperties ()