笑看尘世|学习Vue3.0,先来了解一下Proxy( 三 )
handler 里面的方法列表handler里面的方法可以有以下这十三个 , 每一个都对应的一种或多种针对proxy代理对象的操作行为
- handler.get当通过proxy去读取对象里面的属性的时候 , 会进入到get钩子函数里面
- handler.set当通过proxy去为对象设置修改属性的时候 , 会进入到set钩子函数里面
- handler.has当使用in判断属性是否在proxy代理对象里面时 , 会触发has , 比如const obj = {name: '子君'}console.log('name' in obj)
- handler.deleteProperty当使用delete去删除对象里面的属性的时候 , 会进入deleteProperty`钩子函数
- handler.apply当proxy监听的是一个函数的时候 , 当调用这个函数时 , 会进入apply钩子函数
- handle.ownKeys当通过Object.getOwnPropertyNames,Object.getownPropertySymbols,Object.keys,Reflect.ownKeys去获取对象的信息的时候 , 就会进入ownKeys这个钩子函数
- handler.construct当使用new操作符的时候 , 会进入construct这个钩子函数
- handler.defineProperty当使用Object.defineProperty去修改属性修饰符的时候 , 会进入这个钩子函数
- handler.getPrototypeOf当读取对象的原型的时候 , 会进入这个钩子函数
- handler.setPrototypeOf当设置对象的原型的时候 , 会进入这个钩子函数
- handler.isExtensible当通过Object.isExtensible去判断对象是否可以添加新的属性的时候 , 进入这个钩子函数
- handler.preventExtensions当通过Object.preventExtensions去设置对象不可以修改新属性时候 , 进入这个钩子函数
- handler.getOwnPropertyDescriptor在获取代理对象某个属性的属性描述时触发该操作 , 比如在执行 Object.getOwnPropertyDescriptor(proxy, "foo") 时会进入这个钩子函数
详细介绍get当通过proxy去读取对象里面的属性的时候 , 会进入到get钩子函数里面
当我们从一个proxy代理上面读取属性的时候 , 就会触发get钩子函数 , get函数的结构如下
/** * target: 目标对象 , 即通过proxy代理的对象 * key: 要访问的属性名称 * receiver: receiver相当于是我们要读取的属性的this,一般情况 *下他就是proxy对象本身 , 关于receiver的作用 , 后文将具体讲解 */handle.get(target,key, receiver)示例我们在工作中经常会有封装axios的需求 , 在封装过程中 , 也需要对请求异常进行封装 , 比如不同的状态码返回的异常信息是不同的 , 如下是一部分状态码及其提示信息:// 状态码提示信息const errorMessage = {400: '错误请求',401: '系统未授权 , 请重新登录',403: '拒绝访问',404: '请求失败 , 未找到该资源'}// 使用方式const code = 404const message = errorMessage[code]console.log(message)但这存在一个问题 , 状态码很多 , 我们不可能每一个状态码都去枚举出来 , 所以对于一些异常状态码 , 我们希望可以进行统一提示 , 如提示为系统异常 , 请联系管理员 , 这时候就可以使用Proxy对错误信息进行代理处理// 状态码提示信息const errorMessage = {400: '错误请求',401: '系统未授权 , 请重新登录',403: '拒绝访问',404: '请求失败 , 未找到该资源'}const proxy = new Proxy(errorMessage, {get(target,key) {const value = http://kandian.youth.cn/index/target[key]return value ||'系统异常 , 请联系管理员'}})// 输出 错误请求console.log(proxy[400])// 输出 系统异常 , 请联系管理员console.log(proxy[500])
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 上海市交通委员会|市交通委党组参加《民法典》学习会
- Java|计算机专业的本科生,该选择学习Java技术体系还是.NET技术体系
- 时尚穿搭生活馆|40、50岁女人就别穿“大妈装”了!学习博主减龄穿搭,洋气又减龄
- 消除"学历歧视",鹰视教育助力全民终身学习教育体系建设
- 美容|提升女人味的秋季妆容,一定要学习
- 上海虹口门户网站|区科委党委运用“O2O”模式开展“四史”学习教育
- 笑看尘世|Spring4基础二二-AOP篇-通知(2)-通知详解
- 轻拔琴弦|非常强大,硬核!微软云K8S学习指南免费领取了
- 学霸|他是哈佛、耶鲁学霸。他坦言:拉开人生距离的,是这些学习方法
- 澎湃新闻|如何教孩子防性侵知识?边看动画边学习
