JavaScript Academy · Aula

A API Reflect

Encaminhe operações com métodos de Reflect.

Aula 3 de 413 etapas

A API Reflect é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

O que é a API de reflexão

A API de reflexão é um objeto integrado com métodos que executam as operações padrão de baixo nível em objetos: obter, definir, excluir e muito mais.

Seus métodos correspondem individualmente aos interceptadores de proxy, o que faz dela a parceira ideal para escrever proxies corretos.

Reflect.get

Reflect.get(target, prop) lê uma propriedade, assim como target[prop], mas na forma de uma chamada de função clara.

const obj = { name: 'Ada', age: 36 };

console.log(Reflect.get(obj, 'name'));
console.log(Reflect.get(obj, 'age'));

Reflect.set

Reflect.set(target, prop, value) escreve uma propriedade e retorna true ou false para indicar o sucesso, exatamente como espera um interceptador set.

const obj = {};
const ok = Reflect.set(obj, 'score', 42);

console.log(ok);
console.log(obj.score);

Reflect.has e deleteProperty

Reflect.has corresponde ao operador in, e Reflect.deleteProperty corresponde a delete; ambos são funções que retornam valores booleanos.

const obj = { a: 1, b: 2 };

console.log(Reflect.has(obj, 'a'));
console.log(Reflect.deleteProperty(obj, 'b'));
console.log(Reflect.has(obj, 'b'));

Reflect.ownKeys

Reflect.ownKeys retorna todas as chaves de propriedades próprias, incluindo símbolos e propriedades não enumeráveis, sendo mais completo que Object.keys.

const obj = { a: 1, b: 2 };
Object.defineProperty(obj, 'hidden', { value: 3, enumerable: false });

console.log(Object.keys(obj));
console.log(Reflect.ownKeys(obj));

Encaminhamento em um proxy

O verdadeiro poder está em chamar, dentro de um interceptador, o método correspondente de Reflect para executar o comportamento padrão e, em seguida, adicionar sua lógica personalizada ao redor dele.

const proxy = new Proxy({ v: 1 }, {
  get(target, prop, receiver) {
    console.log('reading ' + prop);
    return Reflect.get(target, prop, receiver);
  }
});

console.log(proxy.v);

Encaminhando set corretamente

Usar Reflect.set dentro de um interceptador set retorna automaticamente o valor booleano correto, portanto você não precisa se lembrar de retornar true por conta própria.

const proxy = new Proxy({}, {
  set(target, prop, value, receiver) {
    console.log('writing ' + prop);
    return Reflect.set(target, prop, value, receiver);
  }
});

proxy.x = 10;
console.log(proxy.x);

Por que o receptor é importante

Passar o receiver para Reflect.get e Reflect.set garante que getters e setters sejam executados com o this correto, o que é importante quando os objetos herdam uns dos outros.

const base = { get label() { return 'id-' + this.id; } };
const proxy = new Proxy(base, {
  get(target, prop, receiver) {
    return Reflect.get(target, prop, receiver);
  }
});
const child = Object.create(proxy);
child.id = 7;
console.log(child.label);

Reflect.apply

Reflect.apply(fn, thisArg, argsArray) chama uma função com um this específico e um vetor de argumentos, sendo uma alternativa mais clara a fn.apply.

function greet(greeting, name) {
  return greeting + ', ' + name;
}

console.log(Reflect.apply(greet, null, ['Hello', 'Ada']));

Reflect.construct

Reflect.construct(Cls, argsArray) cria uma instância, sendo equivalente a new Cls(...args), mas usando um vetor de argumentos.

class Point {
  constructor(x, y) { this.x = x; this.y = y; }
}

const p = Reflect.construct(Point, [3, 4]);
console.log(p.x, p.y);

Por que a API de reflexão é importante

Reflect oferece versões previsíveis, na forma de funções, das operações internas de objetos e combina perfeitamente com proxies: cada interceptador encaminha a operação para o método correspondente de Reflect. O resultado é um código de proxy correto e minimalista. Em seguida, você aplicará tudo isso a casos de uso práticos.

const audited = new Proxy({ balance: 100 }, {
  set(t, p, v, r) {
    console.log(p + ': ' + t[p] + ' -> ' + v);
    return Reflect.set(t, p, v, r);
  }
});
audited.balance = 150;
console.log(audited.balance);

Verificação rápida

Por que chamar Reflect.get(target, prop, receiver) dentro de um interceptador get em vez de usar target[prop]?

Recapitulação: a API de reflexão

Você aprendeu sobre a contraparte do proxy:

  • Reflect fornece operações padrão na forma de funções: get, set, has, deleteProperty, ownKeys.
  • Seus métodos correspondem individualmente aos interceptadores de proxy.
  • Encaminhar operações por meio de Reflect com o receiver mantém a herança correta.
  • Reflect.apply e Reflect.construct chamam funções e criam instâncias de forma clara.
Grátis para começar

Aprenda JavaScript com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
59
Aulas
200

Perguntas Frequentes

A aula “A API Reflect” é grátis?

Sim — o texto completo de “A API Reflect” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “A API Reflect”?

Encaminhe operações com métodos de Reflect. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “A API Reflect”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Criando um Proxy
  2. Armadilhas get e set
  3. A API Reflect
  4. Casos de uso práticos de Proxy
← Voltar para JavaScript Academy