Proxy

  • Proxy
  • Proxy的set和get捕获器
  • Proxy的has和deleteProperty捕获器
  • 其他捕获器

Proxy

ES6里的新增类,帮助创建一个代理,如果我们希望监听一个对象的相关操作,那么可以先创建一个代理对象(Proxy对象),之后对该对象的所有操作,都通过代理对象来完成,代理对象可以监听对原对象进行了哪些操作。可以通过重写捕获器trap(13种)完成想要的操作。也就是说对原对象进行访问控制和增加功能。
简单演示:

const obj = {name: "yyy",age: 88
}
//需要new Proxy对象,并且传入需要侦听的对象以及一个处理对象(可以称之为handler)const p = new Proxy(target, handler)
const objProxy = new Proxy(obj,{});
//{}默认不修改里面的捕捉器
console.log(objProxy.name);
console.log(objProxy.age);
objProxy.name = "ooo";//同时修改了obj里的name
console.log(obj.name);

输出:yyy 88 ooo

Proxy的set和get捕获器

set和get分别对应的是函数类型

set函数有四个参数:

  1. target:目标对象(侦听的对象)
  2. property:将被设置的属性key
  3. value:新属性值
  4. receiver:调用的代理对象

get函数有三个参数:

  1. target:目标对象(侦听的对象)
  2. property:被获取的属性key
  3. receiver:调用的代理对象
const objProxy = new Proxy(foo,{//获取值时的捕获器get: function(target, key){console.log(target,`对象的${key}被访问了`);return target[key];},//设置值时的捕获器set: function(target, key, newValue){target[key] = newValue;console.log(`${target}对象的${key}被修改了`);}
});

Proxy的has和deleteProperty捕获器

  // 监听in的捕获器has: function(target, key) {console.log(`监听到对象的${key}属性in操作`, target)return key in target},// 监听delete的捕获器deleteProperty: function(target, key) {console.log(`监听到对象的${key}属性in操作`, target)delete target[key]}console.log("name" in objProxy);delete objProxy.name;

其他捕获器

  1. handler.getPrototypeOf()
    Object.getPrototypeOf 方法的捕捉器。
  2. handler.setPrototypeOf()
    Object.setPrototypeOf 方法的捕捉器。
  3. handler.isExtensible()
    Object.isExtensible 方法的捕捉器。
  4. handler.preventExtensions()
    Object.preventExtensions 方法的捕捉器。
  5. handler.getOwnPropertyDescriptor()
    Object.getOwnPropertyDescriptor 方法的捕捉器。
  6. handler.defineProperty()
    Object.defineProperty 方法的捕捉器。
  7. handler.ownKeys()
    Object.getOwnPropertyNames 方法和
    Object.getOwnPropertySymbols 方法的捕捉器。
  8. handler.has()
    in 操作符的捕捉器。
  9. handler.get()
    属性读取操作的捕捉器。
  10. handler.set()
    属性设置操作的捕捉器。
  11. handler.deleteProperty()
    delete 操作符的捕捉器。
  12. handler.apply()
    函数调用操作的捕捉器。
  13. handler.construct()
    new 操作符的捕捉器。

12和13用于函数对象

【JS】Proxy(代理)相关推荐

  1. vue.config.js配置proxy代理解决跨越;proxy代理报404;

    像我们本地的vue项目运行起来,访问的地址一般是localhost,这个时候请求后台的接口,端口号也不一致,肯定就会存在跨域问题,所以我们要是想正常访问接口的话,就需要解决掉跨域问题. 本文我们是在v ...

  2. vue跨域问题:proxy代理跨域

    前端跨域,本地跨域,vue项目跨域问题 疑问1: 前端开发中解决浏览器的跨域问题 (推荐阅读) 什么是跨域? 为什么要跨域? 解决"跨域"的五种常见方式: 1. JSONP 2. ...

  3. vue-cli、脚手架创建、eslint、alias别名配置、proxy代理配置、axios、scoped、穿透、媒体查询、12栅格、动态rem、1px边框、移动端事件、300ms延迟问题(六)

    vue-cli的使用 现在使用前端工程化开发项目是主流的趋势,也就是说,我们需要使用一些工具来搭建vue的开发环境.一般情况下我们都会选择使用webpack进行项目的构建,在这里我们直接使用vue官方 ...

  4. webpack的proxy代理配置

    webpack的proxy代理配置 在实际项目中不可避免会遇到跨越问题,webpack中的proxy就是解决前端跨域的方法之一. 跨越问题:协议.域名.端口 三者只要有一个与服务端的不一致,就会报跨域 ...

  5. proxy代理报错: Uncaught (in promise) Error: Request failed with status code 500

    POST http://localhost:8013/check/login 500 (Internal Server Error) createError.js:16 Uncaught (in pr ...

  6. 双向绑定 / proxy 代理 整理

    class Vue {constructor(el, data) {this.el = document.querySelector(el)this.data = datathis.domPool = ...

  7. http proxy 代理

    配合webpack 和 webpack-dev-server处理 安装 // 安装 cnpm html-webpack-plugin --save -D cnpm install webpack we ...

  8. axios请求与proxy代理配置

    如果是不考虑跨域问题,那么请求后台数据使用的就是该路径.但是根据同源策略,3000端口(前端页面端口)无法访问5000端口(后台数据端口),此时就需要使用proxy代理配置了. /** * 获取所有的 ...

  9. webpack-dev-server实现静态资源加载和proxy代理

    文章目录 webpack专辑 webpack Dev Server 配置选项 1.静态资源访问 2.Proxy 代理 小结 webpack专辑 如何使用webpack实现模块化打包? 如何通过Load ...

  10. proxy代理的使用(解决跨域,配置多个代理)

    proxy代理的使用(解决跨域,配置多个代理) 一.什么是代理 字面意思就是类似中间商,开启代理,原理就是在本地创建一个虚拟服务器,发送请求数据,同时接受请求的数据, 利用服务器与服务器间,交互,不会 ...

最新文章

  1. Parallel小记
  2. Pytorch中的optimizer.zero_grad和loss和net.backward和optimizer.step的理解
  3. o2 atom(HP rw68xx)系列手机将可以使用Android。
  4. Codeforces Round #590 (Div. 3) F. Yet Another Substring Reverse 子集dp
  5. 数据库操作php,一个数据库操作PHP类
  6. .net WebApi开发
  7. 新建cordova应用,插件开发教程系列(总目录)
  8. [ACM训练] 算法初级 之 搜索算法 之 广度优先算法BFS (POJ 3278+1426+3126+3087+3414)
  9. [深度学习]图片的几种读写方式以及相互转换
  10. python客观题阅卷_利用Python开发智能阅卷系统
  11. AcWing1402. 星空之夜
  12. 写点什么好呢2? 钱、事业、婚姻、人生意义
  13. 画计算机乐谱,邓紫棋《画》简谱
  14. 苦难是人生最好的老师
  15. javaweb第三天JavaScript知识点(来自广陵散老师)
  16. 微信小程序--基础内容(详解)(一)
  17. Typecho博客后台登录页面美化插件
  18. MPLS TE CSPF
  19. XJOI1133百鸡问题
  20. android模糊检索_Android中实现输入框实时模糊搜索效果的方法

热门文章

  1. 2019最新Web全栈架构师第九期视频教程全套
  2. QT运行时问题CreateDC failed
  3. 京淘商城后台管理系统
  4. HTTP/HTTPS
  5. 记一次k8s pod频繁重启的优化之旅
  6. Python 中的多进程(进程之间的通信)
  7. toAppendStream doesn‘t support consuming update and delete changes which is produced by node XXX
  8. Python遗传算法求一元函数最大值
  9. android h5游戏图片不缓存,H5小游戏资源缓存方法与流程
  10. FileNotFoundException: java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset 错误解决