前言
代理模式简而言之就是自己要做的事情交给别人来做,比如说在跨域处理中我们大都是通过代理来处理跨域问题。在实际vue项目开发中,我们本地开发的域名和服务器通常不是在同一个域名下,那么这时候我们都会在vue下配置一个代理服务器,也就是在devserve设置一个proxy来进行接口代理访问
代理模式实现
在es6中,提出了关键词proxy,甚至vue3.0基本思想也是通过proxy来实现的,那么我们就来看一下如何通过proxy来实现代理模式
// 明星let star = {name: '张XX',age: 25,phone: '13910733521'}// 经纪人let agent = new Proxy(star, {get: function (target, key) {if (key === 'phone') {// 返回经纪人自己的手机号return '18611112222'}if (key === 'price') {// 明星不报价,经纪人报价return 120000}return target[key]},set: function (target, key, val) {if (key === 'customPrice') {if (val < 100000) {// 最低 10wthrow new Error('价格太低')} else {target[key] = valreturn true}}}})// 主办方console.log(agent.name)console.log(agent.age)console.log(agent.phone)console.log(agent.price)// 想自己提供报价(砍价,或者高价争抢)agent.customPrice = 150000// agent.customPrice = 90000 // 报错:价格太低console.log('customPrice', agent.customPrice)
其实很简单,就是说我们操纵对象具体使用方法会被proxy拦截到,交由proxy第二个参数对象handler来执行,于是便实现了代理模式。
