Es6的Proxy代理是什么?有哪些用法?

  一.什么是Proxy?

  Proxy 对象是ES6新出的一个特性,用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。

  需要知道的是,在Vue2中双向数据绑定原理(数据劫持)采用Object.defineProperty,而在Vue3中数据劫持原理采用的是Proxy代理。

  二.为什么Proxy会取代Object.defineProperty?

  Object.defineProperty只能劫持对象的属性,不能监听数组。也不能对 es6 新产生的 Map,Set 这些数据结构做出监听。也不能监听新增和删除操作等等。

  Proxy可以直接监听整个对象而非属性,可以监听数组的变化,具有多达13中拦截方法。

  

  总而言之,Proxy 对象是ES6新出的一个特性,用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)。在Vue3中数据劫持原理采用的是Proxy代理。Proxy可以直接监听整个对象而非属性,可以监听数组的变化,具有多达13中拦截方法。

  ● get(target,propKey,receiver):拦截对象属性的读取

  ● set(target,propKey,value,receiver):拦截对象属性的设置

  ● has(target,propKey):拦截propKey in proxy的操作,返回一个布尔值

  ● deleteProperty(target,propKey):拦截delete proxypropKey的操作,返回一个布尔值

  ● ownKeys(target):拦截Object.keys(proxy)、for...in等循环,返回一个数组

  ● getOwnPropertyDescriptor(target, propKey):拦截Object.getOwnPropertyDescriptor(proxy, propKey),返回属性的描述对象

  ● defineProperty(target, propKey, propDesc):拦截Object.defineProperty(proxy, propKey, propDesc),返回一个布尔值

  ● preventExtensions(target):拦截Object.preventExtensions(proxy),返回一个布尔值

  ● getPrototypeOf(target):拦截Object.getPrototypeOf(proxy),返回一个对象

  ● isExtensible(target):拦截Object.isExtensible(proxy),返回一个布尔值

  ● setPrototypeOf(target, proto):拦截Object.setPrototypeOf(proxy, proto),返回一个布尔值

  ● apply(target, object, args):拦截 Proxy 实例作为函数调用的操作

  ● construct(target, args):拦截 Proxy 实例作为构造函数调用的操作

相关推荐
程序员爱钓鱼13 小时前
配置 GoLand 与 VS Code 开发环境
前端·后端·go
程序员爱钓鱼13 小时前
Rust Vec 动态数组详解:创建、增删、遍历与排序
前端·后端·rust
LaughingZhu13 小时前
Product Hunt 每日热榜 | 2026-07-23
前端·神经网络·react.js·搜索引擎·前端框架
To_OC13 小时前
拼路径读文件总踩坑?我把 Node 的 path 和 fs 彻彻底底捋了一遍
javascript·后端·node.js
自然 醒13 小时前
记录We码开发者工具的一个bug
前端·javascript·bug
葡萄城技术团队14 小时前
HTML元素单元格:用自定义 CellType 扩展 SpreadJS 的显示能力
前端·javascript·html
不好听61314 小时前
Fragment:React 的 `<></>` 和原生的 DocumentFragment,同名不同命
前端·react.js·dom
不好听61314 小时前
useState 完全解析:初始化、异步更新、以及为什么传函数能解决闭包问题
前端·react.js
神明不懂浪漫15 小时前
【第七章】Java中的常用类
java·开发语言·前端·经验分享·笔记
GuWenyue21 小时前
放弃云端API!一套React+WebGPU本地LLM方案,零数据上传、离线可用
前端·人工智能·前端框架