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 proxy[propKey]的操作,返回一个布尔值

● 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 实例作为构造函数调用的操作

相关推荐
摘星编程21 分钟前
React Native + OpenHarmony:Timeline垂直时间轴
javascript·react native·react.js
2501_944525541 小时前
Flutter for OpenHarmony 个人理财管理App实战 - 支出分析页面
android·开发语言·前端·javascript·flutter
jin1233222 小时前
React Native鸿蒙跨平台完成剧本杀组队详情页面,可以复用桌游、团建、赛事等各类组队详情页开发
javascript·react native·react.js·ecmascript·harmonyos
李白你好2 小时前
Burp Suite插件用于自动检测Web应用程序中的未授权访问漏洞
前端
经年未远3 小时前
vue3中实现耳机和扬声器切换方案
javascript·学习·vue
刘一说3 小时前
Vue 组件不必要的重新渲染问题解析:为什么子组件总在“无故”刷新?
前端·javascript·vue.js
可触的未来,发芽的智生3 小时前
狂想:为AGI代称造字ta,《第三类智慧存在,神的赐名》
javascript·人工智能·python·神经网络·程序人生
徐同保4 小时前
React useRef 完全指南:在异步回调中访问最新的 props/state引言
前端·javascript·react.js
fanruitian4 小时前
uniapp 创建项目
javascript·vue.js·uni-app
刘一说4 小时前
Vue 导航守卫未生效问题解析:为什么路由守卫不执行或逻辑失效?
前端·javascript·vue.js