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

news/2024/7/11 0:37:17 标签: es6, javascript, 前端

  一.什么是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.niftyadmin.cn/n/5307111.html

相关文章

Pygame和Cocos2d

Pygame和Cocos2d都是 Python 中常用的游戏引擎,但它们的设计目标、特点和使用场景略有不同。 Pygame与Cocos2d,目前是使用人数最多的两个Python游戏库。根据某知名产品点评网站的数据显示,排名前五的Python 2D游戏库如下图所示。其中&#x…

2023春季李宏毅机器学习笔记 02 :机器学习基本概念

资料 课程主页:https://speech.ee.ntu.edu.tw/~hylee/ml/2023-spring.phpGithub:https://github.com/Fafa-DL/Lhy_Machine_LearningB站课程:https://space.bilibili.com/253734135/channel/collectiondetail?sid2014800 一、機器學習基本原理…

Flask 会员列表展示

感谢编程浪子师傅的源码信息分享 web/controllers/member/Member.py # -*- coding: utf-8 -*- from flask import Blueprint,request,redirect,jsonify from common.libs.Helper import ops_render,iPagination,getCurrentDate,getDictFilterField,selectFilterObj from comm…

计算机毕业设计-----ssm+mysql实现的JavaWeb酒店管理系统

项目介绍 本项目为基于ssmmysql实现的JavaWeb酒店管理系统; 主要功能包括: 管理员登录,收入统计,客房管理,商品管理,客房预订,住宿登记,财务统计,旅客管理,接待对象管理等功能。 环境需要 1.运行环境:最好是java jdk 1.8,我们在这个平台上…

借助文档控件Aspose.Words,在 Word 文档中创建和修改 VBA 宏

通常,Word 文档包含 Visual Basic for Applications (VBA) 代码,用于自动执行任务并增强文档功能。如果您是 Java 开发人员,您可能想知道如何与 Word 文档中的 VBA 代码进行交互和修改。因此,在这篇博文中,我们将探讨如…

简易机器学习笔记(五)更换损失函数:交叉熵

前言 我们之前用的是均方差作为我们神经网络的损失函数评估值,但是我们对于结果,比如给定你一张应该是0的照片,它识别成了6,这个时候这个均方差表达了什么特别的含义吗?显然你识别成6并不代表它比识别成1的情况误差更…

04set注入专题/简单类型/数组/List/Set/Map/空字符串/null/特殊符号

1.1注入外部Bean 在之前使用的案例就是注入外部Bean的方式。 <!-- class属性声明要管理哪个类中的对象 property标签的name是提示set方法名ref标签指明注入的bean的id--><bean id"userServiceBean" class"com.powernode.spring6.service.UserService…

bulk-RNA seq测序数据分析流程

假如有bulk-RNA测序的数据&#xff1a;TH1&#xff0c;TH2&#xff0c;TH3三个重复&#xff08;实验组&#xff09;&#xff0c;TW1&#xff0c;TW2&#xff0c;TW3三个重复&#xff08;对照组&#xff09; 准备工作 需要安装的软件&#xff08;如FastQC、Trimmomatic、HISAT…