Reflect 对象的使用
Reflect 提供统一的对象操作方法,整合了 Object 的相关功能
问题
Reflect 是什么?如何使用?
解答
Reflect 是 ES6 引入的内置对象,用于对对象进行统一操作,集成了 Object 相关的所有方法,提供更规范的 API。
主要方法
Reflect.apply():类似 Function.prototype.apply,调用函数并传入参数。
Reflect.construct():对构造函数进行 new 操作,相当于 new target(...args)。
Reflect.defineProperty():定义对象属性,类似 Object.defineProperty()。
Reflect.deleteProperty():删除对象属性,相当于 delete target[name]。
Reflect.get():获取对象属性值,类似 target[name]。
Reflect.getOwnPropertyDescriptor():获取属性描述符,类似 Object.getOwnPropertyDescriptor()。
Reflect.getPrototypeOf():获取对象原型,类似 Object.getPrototypeOf()。
Reflect.has():判断对象是否存在某个属性,功能同 in 运算符。
Reflect.isExtensible():判断对象是否可扩展。注意:Object.seal() 和 Object.freeze() 后的对象不可扩展。
Reflect.ownKeys():返回所有自身属性的数组(不包含继承属性),不受 enumerable 影响。
Reflect.preventExtensions():阻止对象扩展,返回 Boolean。
Reflect.set():设置属性值,返回 Boolean 表示是否成功。
Reflect.setPrototypeOf():设置对象原型,类似 Object.setPrototypeOf()。
示例
const obj = {
name: 'reflect',
}
Reflect.preventExtensions(obj) // 禁止扩展
console.log(Reflect.set(obj, 'age', 'xiaobai')) // false
console.log(obj) // { name: 'reflect' }
console.log(Reflect.isExtensible(obj)) // false
console.log(Reflect.ownKeys(obj)) // [ 'name' ]
关键点
- Reflect 提供统一的对象操作 API,比 Object 方法更规范
Reflect.set()返回 Boolean,可以明确知道操作是否成功Reflect.ownKeys()不受enumerable影响,返回所有自身属性- 配合 Proxy 使用时,Reflect 方法可以保证正确的 this 指向
目录