Reflect.defineProperty()

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

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.

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()

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:

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

Especificações

Especificação
ECMAScript (ECMA-262)
The definition of 'Reflect.defineProperty' in that specification.

Compatibilidade do navegador

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
definePropertyChrome Full support 49Edge Full support 12Firefox Full support 42IE No support NoOpera Full support 36Safari Full support 10WebView Android Full support 49Chrome Android Full support 49Firefox Android Full support 42Opera Android Full support 36Safari iOS Full support 10Samsung Internet Android Full support 5.0nodejs Full support 6.0.0

Legend

Full support  
Full support
No support  
No support

Veja também