Reflect
描述
Reflect 是一个操作对象的API
Reflect 是一个内置的全局对象,它提供拦截 JavaScript 操作的方法。它不是一个函数对象,所以不能用new
优势:
相较于之前处理对象的方法 例如Function.prototype.apply\ delete\ in之类的,将一些明显属于语言内部的函数都添加到了Reflect对象中,用一个单一的全局对象去存储这些函数,能够保持JS代码的干净、整洁。
不然的话,这些函数可能是全局的,或者要通过原型来调用, 不方便统一管理。并将一些命令式的操作如delete、in等使用函数来代替,可以让代码更好的维护
const obj = {key: 'id'} 'key' in obj
=>
Reflect.has(obj,'key')
如果一个对象是不能拓展的,那么在调用Object.defineProperty(obj, name, desc)时,会抛出一个异常
const obj = {key: 'id'}; Object.freeze(obj); Object.defineProperty(obj, 'name', {});
之前我们需要使用try catch来防止页面阻塞
try { Object.defineProperty(obj, 'name', {}); } catch(e) { console.error(e.message) }
现在可以直接用if else进行判断了
if(Reflect.defineProperty(obj, 'name', {})) { // To do... } else { // To do... }
- 静态函数
- Reflect.apply(target, thisArgument, argumentsList) 取代了之前的Function.prototype.apply
function setXY(x, y) { this.x = x; this.y = y; }; const obj = {};
setXY.apply(obj, [1,2])=> Reflect.apply(setXY, obj, [1,2]); console.log(obj); //{x: 1, y: 2}
- construct 提供了一种不用new来调用构造函数的方法
function Animal(name) { this.name = name; }; const dog = new Animal('Wang Cai'); const cat = Reflect.construct(Animal, ['Mao Mi']);
- deleteProperty 取代了之前的delete
const obj = {key: 'id'}; delete obj.key => Reflect.deleteProperty(obj, 'key'); // true or false
- has
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)