Reflect
=======

**Reflect** é um objeto nativo que provê métodos para operações JavaScript interceptáveis. Os métodos são os mesmos que o dos manipuladores de Proxy. `Reflect` não é um objeto de função, então não é construtível.

Descrição
---------

Ao contrário da maioria dos objetos globais, `Reflect` não é um construtor. Você não pode usá-lo com o operador new ou invocar o objeto `Reflect` como uma função. Todas as propriedades e métodos do `Reflect` são estáticos (igual o objeto `Math`).

O objeto `Reflect` provê as seguintes funções estáticas as quais tem os mesmos nomes usados pelos métodos manipuladores de Proxy.

Alguns deste métodos são também os mesmos correspondentes aos métodos em `Object`, embora eles tenham diferenças sutis entre eles.

Métodos
-------

`Reflect.apply(target, thisArgument, argumentsList)`

Chama uma função de destino com os argumentos, conforme especificado pelo parâmetro *`argumentsList`*. Veja também `Function.prototype.apply()`.

`Reflect.construct(target, argumentsList[, newTarget])`

O operador new como uma função. Equivalente a chamada `new target(...args)`. Também possui a opção de especificar um `prototype` diferente

`Reflect.defineProperty(target, propertyKey, attributes)`

Similar ao `Object.defineProperty()`. Retorna um `Boolean` com o valor `true` *se a propriedade foi definida com sucesso*.

`Reflect.deleteProperty(target, propertyKey)` (en-US)

O operador delete (en-US) como uma função. Equivalente a chamada `delete target[name]`.

`Reflect.get()` (en-US), "Reflect.get(*target*, *propertyKey*[, *receiver*])"}}

Uma função que retorna o valor da propriedade. Funciona como obter uma propriedade de um objeto (`target[propertyKey]`) como uma função.

`Reflect.getOwnPropertyDescriptor(target, propertyKey)` (en-US)

Similar ao `Object.getOwnPropertyDescriptor()`. Retorna um descritor de propriedade da propriedade dada se existir no objeto, `undefined` caso contrário.

`Reflect.getPrototypeOf(target)` (en-US)

Igual ao `Object.getPrototypeOf()`.

`Reflect.has(target, propertyKey)` (en-US)

O operador in como função. Retorna um `Boolean` indicando se existe uma propriedade própria ou herdada.

`Reflect.isExtensible(target)` (en-US)

Igual ao `Object.isExtensible()`. Retorna um `Boolean` com o valor `true` se o destino (parâmetro target) for extensível.

`Reflect.ownKeys(target)` (en-US)

Retorna uma matriz das chaves de propriedade do próprio objeto de destino (não herdadas).

`Reflect.preventExtensions(target)` (en-US)

Similar ao `Object.preventExtensions()`. Retorna um `Boolean` com o valor `true` se a atualização foi bem sucedida.

`Reflect.set(target, propertyKey, value[, receiver])`

Uma função que atribui valores a propriedades. Retorna um `Boolean` com o valor `true` se a atualização foi bem sucedida.

`Reflect.setPrototypeOf(target, prototype)` (en-US)

Uma função que define o protótipo de um objeto (en-US). Retorna um `Boolean` com o valor `true` se a atualização foi bem sucedida.

Exemplos
--------

### Verificando se um objeto contém determinadas propriedades


```js
const duck = {
  name: "Maurice",
  color: "white",
  greeting: function () {
    console.log(`Quaaaack! My name is ${this.name}`);
  },
};

Reflect.has(duck, "color");
// true
Reflect.has(duck, "haircut");
// false
```

### Retornando as próprias chaves do objeto


```js
Reflect.ownKeys(duck);
// [ "name", "color", "greeting" ]
```

### Adicionando uma nova propriedade ao objeto


```js
Reflect.set(duck, "eyes", "black");
// returns "true" if successful
// "duck" now contains the property "eyes: 'black'"
```

Especificações
--------------

| Specification |
| --- |
| ECMAScript Language Specification # sec-reflect-object |

Compatibilidade com navegadores
-------------------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

Veja também
-----------

* The `Proxy` global object.
* The `handler` (en-US) object.