Reflect.defineProperty()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.

O método estático Reflect.defineProperty() é como o Object.defineProperty(), mas retorna um Boolean.

Experimente

Sintaxe

Reflect.defineProperty(target, propertyKey, attributes)

Parâmetros

target

O objeto de destino onde será definida a propriedade.

propertyKey

O nome da propriedade a ser definida ou modificada.

attributes

Os atributos para a propriedade que está sendo definida ou modificada.

Valor de retorno

Um Boolean indicando se a propriedade foi ou não definida com êxito.

Erros

Um TypeError, se target não for um Object.

Descrição

O método Reflect.defineProperty permite a adição precisa ou a modificação de uma propriedade em um objeto. Para mais detalhes veja o Object.defineProperty, que é semelhante.

Nota: Uma diferença fundamental: Object.defineProperty retorna o objeto ou lança um TypeError se a propriedade não tiver sido definida com êxito. Reflect.defineProperty, no entanto, simplesmente retorna um Boolean indicando se a propriedade foi ou não definida com êxito.

Exemplos

Usando Reflect.defineProperty()

js
let obj = {};
Reflect.defineProperty(obj, "x", { value: 7 }); // true
obj.x; // 7

Verificando se a definição da propriedade foi bem-sucedida

Com o Object.defineProperty, que retorna um objeto se for bem-sucedido ou lança um TypeError, você usaria um bloco try...catch para detectar qualquer erro que ocorreu ao definir uma propriedade.

Como Reflect.defineProperty retorna um status de sucesso booleano, você pode usar apenas um bloco if...else aqui:

js
if (Reflect.defineProperty(target, property, attributes)) {
  // success
} else {
  // failure
}

Especificações

Specification
ECMAScript Language Specification
# sec-reflect.defineproperty

Compatibilidade com navegadores

BCD tables only load in the browser

Veja também