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