Reflect 反射

js/reflect2026-08-24 19:46:25

Reflect 是 JavaScript 中的一个内置对象,它提供了一些与对象操作相关的静态方法,这些方法与 Proxy 对象的捕获器方法一一对应。Reflect 的主要目的是简化对象的操作,并提供一种更为一致和可预测的方式来执行这些操作。

基本使用

Reflect 提供了一组静态方法,这些方法可以用来执行常见的对象操作,如属性访问、函数调用、构造函数调用等。

  • Reflect.get(target, propertyKey, receiver): 获取对象的属性值。
  • Reflect.set(target, propertyKey, value, receiver): 设置对象的属性值。
  • Reflect.has(target, propertyKey): 检查对象是否具有某个属性。
  • Reflect.deleteProperty(target, propertyKey): 删除对象的某个属性。
  • Reflect.apply(target, thisArgument, argumentsList): 调用一个函数。
  • Reflect.construct(target, argumentsList, newTarget): 构造一个对象。
  • Reflect.ownKeys(target): 获取对象的所有属性键。
  • Reflect.defineProperty(target, propertyKey, attributes): 定义对象的属性。
  • Reflect.getOwnPropertyDescriptor(target, propertyKey): 获取对象属性的描述符。
  • Reflect.preventExtensions(target): 防止对象扩展。
  • Reflect.isExtensible(target): 检查对象是否可扩展。
const obj = {
  name: 'Alice',
  age: 25
};

// 使用 Reflect.get 获取属性值
console.log(Reflect.get(obj, 'name')); // 输出: Alice

// 使用 Reflect.set 设置属性值
Reflect.set(obj, 'age', 30);
console.log(obj.age); // 输出: 30

// 使用 Reflect.has 检查属性是否存在
console.log(Reflect.has(obj, 'name')); // 输出: true

// 使用 Reflect.deleteProperty 删除属性
Reflect.deleteProperty(obj, 'age');
console.log(obj.age); // 输出: undefined

// 使用 Reflect.apply 调用函数
function greet(greeting, punctuation) {
  return `${greeting}, ${this.name}${punctuation}`;
}
console.log(Reflect.apply(greet, obj, ['Hello', '!'])); // 输出: Hello, Alice!

// 使用 Reflect.construct 构造对象
function Person(name, age) {
  this.name = name;
  this.age = age;
}
const person = Reflect.construct(Person, ['Bob', 40]);
console.log(person); // 输出: Person { name: 'Bob', age: 40 }

参考

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Reflect

本页目录