前几天,我去朋友家做客。朋友新开了一家“智能酒店”,号称整个酒店没有一个普通员工,全是机器人和智能管家,我一进门,就发现不对劲,前台小姐姐看起来很正常,但当我准备登记身份证时,她突然说:“请稍等,我需要检查一下您是否有权限入住。”
接着又检查了房间状态、会员等级、支付记录……我好奇地问朋友:“这前台怎么管这么宽?”
朋友神秘一笑:“她根本不是前台,她是代理(Proxy)。”
这时候我突然想起了 JavaScript 里的 Proxy,如果说对象(Object)是一家酒店,那么 Proxy 就像酒店门口的超级管家,所有人想访问酒店里的东西,都必须先经过他,而这个超级管家最厉害的地方,就是拥有各种各样的“捕获器(Trap)”。
今天我们就来聊聊 JavaScript Proxy 的十三大捕获器,以及与之对应的 Reflect 反射方法。
什么是 Proxy?
Proxy 本质上是对象的代理层。
访问:console.log(proxy.name);
实际上:
Proxy 就像酒店前台,所有请求先到前台,前台决定:
- 放行
- 拒绝
- 修改结果
- 记录日志
get()
拦截属性读取
有人来问 proxy.name,就会触发 get。
输出:
读取属性: name
小米
对应 Reflect.get(target, key);,就像酒店前台查询住客信息。
set()
拦截属性赋值
proxy.name ="老王";,触发: