一.什么是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 实例作为构造函数调用的操作
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
相关推荐: 不单一的错误!如何修复Windows 10上“未安装音频输出设备”的错误
许多Windows 10用户,尤其是那些使用HP或Dell笔记本电脑和PC的用户,都会遇到一个错误,上面写着“未安装音频输出设备”。这意味着你无法收听计算机上的任何声音,这让你很难放松,也很难完成工作。 错误通常会在系统托盘中的音频控制旁边显示一个红十字符号。…