--- title: Reflect slug: Web/JavaScript/Reference/Global_Objects/Reflect tags: - ECMAScript6 - JavaScript - NeedsTranslation - Overview - Reflect - TopicStub translation_of: Web/JavaScript/Reference/Global_Objects/Reflect ---
{{JSRef}}

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 {{jsxref("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 {{jsxref("Object")}}, embora eles tenham diferenças sutis entre eles.

Métodos

{{jsxref("Reflect.apply()", "Reflect.apply(targetthisArgumentargumentsList)")}}
Chama uma função de destino com os argumentos, conforme especificado pelo parâmetro argumentsList. Veja também {{jsxref("Function.prototype.apply()")}}.
{{jsxref("Reflect.construct()", "Reflect.construct(targetargumentsList[, 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
{{jsxref("Reflect.defineProperty()", "Reflect.defineProperty(targetpropertyKeyattributes)")}}
Similar ao {{jsxref("Object.defineProperty()")}}. Retorna um {{jsxref("Boolean")}} com o valor true se a propriedade foi definida com sucesso.
{{jsxref("Reflect.deleteProperty()", "Reflect.deleteProperty(targetpropertyKey)")}}
O operador delete como uma função. Equivalente a chamada delete target[name].
{{jsxref("Reflect.get()")}}, "Reflect.get(targetpropertyKey[, receiver])"}}
Uma função que retorna o valor da propriedade. Funciona como obter uma propriedade de um objeto (target[propertyKey]) como uma função.
{{jsxref("Reflect.getOwnPropertyDescriptor()", "Reflect.getOwnPropertyDescriptor(targetpropertyKey)")}}
Similar ao {{jsxref("Object.getOwnPropertyDescriptor()")}}. Retorna um descritor de propriedade da propriedade dada se existir no objeto, {{jsxref ("undefined")}} caso contrário.
{{jsxref("Reflect.getPrototypeOf()", "Reflect.getPrototypeOf(target)")}}
Igual ao {{jsxref("Object.getPrototypeOf()")}}.
{{jsxref("Reflect.has()", "Reflect.has(target, propertyKey)")}}
O operador in como função. Retorna um {{jsxref("Boolean")}} indicando se existe uma propriedade própria ou herdada.
{{jsxref("Reflect.isExtensible()", "Reflect.isExtensible(target)")}}
Igual ao {{jsxref("Object.isExtensible()")}}. Returna um {{jsxref("Boolean")}} com o valor true se o destino (parâmetro target) for extensível.
{{jsxref("Reflect.ownKeys()", "Reflect.ownKeys(target)")}}
Retorna uma matriz das chaves de propriedade do próprio objeto de destino (não herdadas).
{{jsxref("Reflect.preventExtensions()", "Reflect.preventExtensions(target)")}}
Similar ao {{jsxref("Object.preventExtensions()")}}. Retorna um {{jsxref("Boolean")}} com o valor true se a atualização foi bem sucedida.
{{jsxref("Reflect.set()", "Reflect.set(targetpropertyKeyvalue[, receiver])")}}
Uma função que atribui valores a propriedades. Retorna um {{jsxref ("Boolean")}} com o valor true se a atualização foi bem sucedida.
{{jsxref("Reflect.setPrototypeOf()", "Reflect.setPrototypeOf(targetprototype)")}}
Uma função que define o protótipo de um objeto. Retorna um {{jsxref ("Boolean")}} com o valor true se a atualização foi bem sucedida.

Exemplos

Verificando se um objeto contém determinadas propriedades

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

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

Adicionando uma nova propriedade ao objeto

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

Especificações

Especificação Situação Comentário
{{SpecName('ES6', '#sec-reflect-object', 'Reflect')}} {{Spec2('ES6')}} Definição Inicial
{{SpecName('ESDraft', '#sec-reflect-object', 'Reflect')}} {{Spec2('ESDraft')}} Reflect.enumerate foi removido.

Compatibilidade do navegador

{{CompatibilityTable}}

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support {{CompatChrome(49.0)}} {{CompatVersionUnknown}} {{CompatGeckoDesktop("42")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatChrome(49.0)}} {{CompatChrome(49.0)}} {{CompatGeckoMobile("42")}} {{CompatNo}} {{CompatNo}} {{CompatNo}}

Veja também