Javascript Object.defineProperty ()

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.

  • 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, gete setchaves, ele é tratado como um descritor de dados. Se um descritor tem tanto valueou writablee getou setchaves, 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 ()

Artigos interessantes...