JavaScript Academy · Lección

La API Reflect

Reenvíe operaciones con los métodos de Reflect.

Lección 3 de 413 pasos

La API Reflect es una lección gratuita de JavaScript Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de JavaScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de JavaScript Academy incluye 4 lecciones en total.

¿Qué es Reflect?

Reflect es un objeto integrado con métodos que ejecutan las operaciones predeterminadas de bajo nivel sobre objetos: obtener, establecer, eliminar y otras.

Sus métodos reflejan las trampas de proxy una a una, por lo que es el complemento ideal para escribir proxies correctos.

Reflect.get

Reflect.get(target, prop) lee una propiedad, igual que target[prop], pero mediante una llamada de función 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) escribe una propiedad y devuelve true o false para indicar si la operación se realizó correctamente, tal como espera una trampa set.

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

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

Reflect.has y deleteProperty

Reflect.has refleja el operador in y Reflect.deleteProperty refleja delete; ambos funcionan como métodos que devuelven 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 devuelve todas las claves de propiedades propias, incluidos los símbolos y las propiedades no enumerables; es más 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));

Reenviar operaciones en un Proxy

Ahí reside la verdadera potencia: dentro de una trampa, llame al método correspondiente de Reflect para ejecutar el comportamiento predeterminado y añada después su lógica personalizada.

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

console.log(proxy.v);

Reenviar set correctamente

Usar Reflect.set dentro de una trampa set devuelve automáticamente el booleano correcto, así que no tiene que acordarse de devolver true usted mismo.

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 qué importa receiver

Pasar receiver a Reflect.get y Reflect.set garantiza que los getters y setters se ejecuten con el this correcto, algo importante cuando los objetos heredan unos de otros.

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) llama a una función con un this determinado y un array de argumentos; es una alternativa más 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) crea una instancia, de forma equivalente a new Cls(...args), pero usando un array 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 qué importa Reflect

Reflect proporciona versiones predecibles, en forma de funciones, de las operaciones internas de los objetos y combina perfectamente con los proxies: cada trampa reenvía la operación a su método correspondiente de Reflect. El resultado es un código de proxy correcto y conciso. A continuación aplicará todo esto a casos de uso prácticos.

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

Comprobación rápida

¿Por qué llamar a Reflect.get(target, prop, receiver) dentro de una trampa get en lugar de usar target[prop]?

Repaso: la API Reflect

Ha aprendido cuál es el complemento de Proxy:

  • Reflect proporciona operaciones predeterminadas en forma de funciones: get, set, has, deleteProperty y ownKeys.
  • Sus métodos reflejan las trampas de proxy una a una.
  • Reenviar las operaciones mediante Reflect junto con receiver mantiene la herencia correcta.
  • Reflect.apply y Reflect.construct permiten llamar a funciones y crear instancias de forma clara.
Gratis para empezar

Aprende JavaScript con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
59
Lecciones
200

Preguntas frecuentes

¿La lección «La API Reflect» es gratis?

Sí — el texto completo de «La API Reflect» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de JavaScript Academy, actualiza a CoddyKit PRO. El curso de JavaScript Academy incluye 4 lecciones en total.

¿Qué aprenderé en «La API Reflect»?

Reenvíe operaciones con los métodos de Reflect. Practicas JavaScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar JavaScript Academy?

No se requiere experiencia previa. JavaScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «La API Reflect»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de JavaScript Academy?

Sí. Cada lección de JavaScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Creación de un Proxy
  2. Trampas get y set
  3. La API Reflect
  4. Casos prácticos de uso de Proxy
← Volver a JavaScript Academy