Reflect 是 JavaScript 中用于标准化对象操作的内置对象,提供与 Proxy 拦截器一一对应的静态方法,如 Reflect.set、Reflect.get 等,返回布尔值或操作结果且失败不抛错,核心作用是实现可拦截、函数化、语义严谨的对象底层操作。

Reflect 是 JavaScript 中用于实现元编程(metaprogramming)的内置对象,它提供了一组静态方法,用来以更规范、更函数式的方式操作对象——本质上是把原本分散在 Object、Object.defineProperty、delete、in、apply、call 等地方的操作,统一收归为可调用的方法,并与 Proxy 的 trap(拦截器)一一对应。
Reflect 是什么?不是“反射”而是“操作抽象层”
虽然名字叫 Reflect(常被类比为其他语言的“反射”),但它不用于运行时检查类型或获取私有字段(JS 没有真正意义上的私有字段反射),也不像 Java 那样能动态加载类、调用任意方法。它的核心定位是:把对象底层操作标准化、函数化、可拦截化。
比如:
-
obj.foo = 123是赋值语句 → 对应Reflect.set(obj, 'foo', 123) -
'bar' in obj是 in 操作符 → 对应Reflect.has(obj, 'bar') -
delete obj.baz是 delete 表达式 → 对应Reflect.deleteProperty(obj, 'baz') -
Object.defineProperty(obj, 'x', {value: 1})→ 对应Reflect.defineProperty(obj, 'x', {value: 1})
所有 Reflect 方法都返回布尔值或操作结果(如 Reflect.get() 返回属性值,Reflect.apply() 返回函数调用结果),失败时不抛错(多数返回 false),便于错误处理和 Proxy 拦截逻辑编写。
立即学习“Java免费学习笔记(深入)”;
标签: javascript java js app 工具 proxy 为什么
还木有评论哦,快来抢沙发吧~