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 Objectnome da classe.
Parâmetros defineProperty ()
O defineProperty()método inclui:
- obj - O objeto no qual definir a propriedade.
- prop - O nome ou
Symbolda 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.
configurableenumerable
Os descritores de dados também podem ter:
valuewritable
Um descritor de acessador também pode ter:
getset
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,getesetchaves, ele é tratado como um descritor de dados. Se um descritor tem tantovalueouwritableegetousetchaves, 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 writabledeve ser true, caso contrário, ele não modificará e gerará erro no modo estrito.
O enumerableatributo property define se a propriedade é escolhida Object.assign()ou espalhada pelo operador.
O configurableatributo controla ao mesmo tempo se a propriedade pode ser excluída do objeto e se seus atributos (diferentes de valuee writable) podem ser alterados.
Leitura recomendada: objeto Javascript defineProperties ()








