相比于vue2.0,Proxy的优势有哪些(Proxy及其优势)

什么是 Proxy

通常,当谈到JavaScript语言时,我们讨论的是ES6标准提供的新特性,本文也不例外。我们将讨论JavaScript代理以及它们的作用,但在我们深入研究之前,我们先来看一下Proxy的定义是什么。

MDN上的定义是:代理对象是用于定义基本操作的自定义行为(例如,属性查找,赋值,枚举,函数调用等)。

换句话说,我们可以说代理对象是我们的目标对象的包装器,我们可以在其中操纵其属性并阻止对它的直接访问。你可能会发现将它们应用到实际代码中很困难,我鼓励你仔细阅读这个概念,它可能会改变你的观点。

术语

handler

包含陷阱(traps)的占位符对象。

traps

提供属性访问的方法。这类似于操作系统中捕获器的概念。

target

代理虚拟化的对象。(由代理对象包装和操作的实际对象)

在本文中,我将为 get 和 set 陷阱 提供简单的用例,考虑到最后,我们将看到如何使用它们并包含更复杂的功能,如API。

语法和用例

let p = new Proxy(target, handler);new Proxy(target, handler);

将目标和处理程序传递给Proxy构造函数,这样就创建了一个proxy对象。现在,让我们看看如何利用它。为了更清楚地看出Proxy的好处,首先,我们需要编写一些没有它的代码。

想象一下,我们有一个带有几个属性的用户对象,如果属性存在,我们想要打印用户信息,如果不存在,则抛出异常。在不使用代理对象时,判断属性值是否存在的代码也放在了打印用户信息的函数,即 printUser 中(这并不是我们所希望的),如下demo所示:

let user = {
    name: 'John',    surname: 'Doe'
};
let printUser = (property) => {
    let value = user[property];
if (!value) { 
       throw new Error(`The property [${property}] does not exist`);  
} else {  
       console.log(`The user ${property} is ${value}`);    
}}
printUser('name'); 
// 输出: 'The user name is John'printUser('email');
// 抛出错误: The property [email] does not exist    name: 'John',    surname: 'Doe'};
let printUser = (property) => {
let value = user[property];
if (!value) {
        throw new Error(`The property [${property}] does not exist`);    
} else {
        console.log(`The user ${property} is ${value}`);    
}}
printUser('name');
// 输出: 'The user name is John'printUser('email'); 
// 抛出错误: The property [email] does not exist

结论

当您需要对数据进行更多控制时,代理可以派上用场。你可以根据受控规则扩展或拒绝对原始数据的访问,从而监视对象并确保正确行为。

如果您喜欢这篇文章,请关注我的公众号。可以在下面的评论部分中表达您的想法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 2.0中,通常是通过配置webpack来设置proxyTable。ProxyTable是一个用于配置跨域请求代理的功能,用于处理在开发过程中,前端请求后端API接口时可能会出现的跨域问题。通过设置proxyTable,可以将前端请求代理到后端的某个路径上。这样就可以实现在开发过程中绕过跨域问题,方便前端开发和调试。 在Vue 2.0的配置文件中,默认的配置是没有proxyTable的选项的。但是我们可以自己手动添加proxyTable,并且配置相应的代理规则。一般来说,我们可以在config文件夹下的index.js文件中找到webpack配置的设置。 在index.js文件中,可以找到`dev`属性,它是用于开发环境的配置。在`dev`属性中加入`proxyTable`属性,并且配置相应的代理规则。例如: ```javascript module.exports = { dev: { proxyTable: { '/api': { target: 'http://localhost:3000', // 目标主机 changeOrigin: true, // 开启跨域代理 pathRewrite: { '^/api': '/mock' // 修改请求路径 } } } } } ``` 上述配置就是将以`/api`开头的请求,代理到`http://localhost:3000`主机下,并且将`/api`替换为`/mock`。这样在开发环境中,前端请求`/api`时就会被代理到`http://localhost:3000/mock`。 需要注意的是,以上配置是适用于Vue CLI的默认配置,如果你使用了其他方式创建Vue项目,可能会有一些差异,具体可以参考对应的配置文件。另外,在生产环境打包时,不建议使用proxyTable,因为打包后的代码会被部署到生产环境中,请求地址应该是指向部署后的后端服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

结果才重要

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值