A API Reflect
Encaminhe operações com métodos de Reflect.
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:
Reflectfornece 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
Reflectcom oreceivermantém a herança correta. Reflect.applyeReflect.constructchamam funções e criam instâncias de forma clara.
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.