Reflect 是 ES6 引入的标准化反射 API,统一了语法、构造器和原型方法中的底层操作为可调用、可拦截、返回明确结果的静态函数,所有方法均不抛异常而返回布尔值或具体值,天然适配 Proxy 拦截逻辑。

Reflect 对象是 ES6 引入的标准化反射 API,它把原本分散在语法(如 .、[]、in、delete)、构造器(如 Object、Function)和原型方法中的底层操作,统一为可调用、可拦截、可返回明确结果的静态函数。所有方法都返回布尔值或具体值,不抛异常(失败时返回 false 或 undefined),天然适配 Proxy 拦截逻辑。
属性读写与存在性检查
替代点号/方括号访问、赋值和 in 运算符,支持 receiver 绑定和容错处理:
-
Reflect.get(target, key, receiver):安全读取属性,
receiver可指定 getter 中的this;属性不存在时不报错,返回undefined -
Reflect.set(target, key, value, receiver):设置属性并返回
true/false表示是否成功;对不可写属性、只读 accessor 会静默失败 -
Reflect.has(target, key):等价于
key in target,返回布尔值;比target[key] !== undefined更准确(能区分undefined值和缺失属性)
属性定义与元信息操作
封装 Object 的描述符相关能力,参数更一致,返回值更可靠:
-
Reflect.defineProperty(target, key, descriptor):定义或修改属性,成功返回
true,失败返回false(Object.defineProperty失败则抛错) -
Reflect.getOwnPropertyDescriptor(target, key):获取属性描述符,同
Object.getOwnPropertyDescriptor,但作为 Reflect 方法便于 Proxy 中转发 -
Reflect.deleteProperty(target, key):删除属性,返回布尔值;比
delete target[key]更可控(严格模式下也能安全判断)
对象结构与原型操作
提供对对象底层结构的函数式控制:
-
Reflect.ownKeys(target):返回所有自身属性键(含字符串和 Symbol),是
Object.getOwnPropertyNames+Object.getOwnPropertySymbols的组合 -
Reflect.getPrototypeOf(target) 和 Reflect.setPrototypeOf(target, prototype):获取/设置原型,行为与对应 Object 方法一致,但返回值更规范(
setPrototypeOf失败返回false) - Reflect.isExtensible(target) 和 Reflect.preventExtensions(target):判断/冻结对象扩展能力,返回布尔值,语义清晰
函数调用与实例构造
把 new 和 apply 这类操作符/方法也纳入函数式 API 体系:
-
Reflect.apply(target, thisArg, argsArray):调用函数,等价于
target.apply(thisArg, argsArray),但签名更直观 -
Reflect.construct(target, argsArray, newTarget?):创建实例,支持指定
newTarget(用于继承链中自定义构造器),替代new target(...args)

















