js的讲解

Proxy 是 ES6(ECMAScript 2015)中引入的一个新的内置对象,用于定义某些操作的自定义行为(如属性查找、赋值、枚举、函数调用等)。Proxy 可以被看作是一个拦截器,它拦截并自定义对象上的基本操作。通过创建一个对象的 Proxy,你可以控制对这个对象的访问,包括读取属性、设置属性、枚举属性、函数调用等。

 

Proxy 接收两个参数:

 

目标对象(target):你想要拦截其操作的对象。

处理器对象(handler):一个对象,其属性是当执行一个操作时定义代理的行为的函数。

处理器对象可以定义零个或多个捕获器(trap),这些捕获器是定义在处理器对象上的特定函数,用于拦截并处理目标对象上的操作。

 

示例

下面是一个简单的 Proxy 示例,它拦截了对目标对象属性的读取和设置操作:

 

const target = {  

  foo: 'bar',  

  log: ['hello', 'world']  

};  

  

const handler = {  

  get: function(target, prop, receiver) {  

    console.log(`Getting ${prop}!`);  

    return Reflect.get(...arguments);  

  },  

  set: function(target, prop, value, receiver) {  

    console.log(`Setting ${prop} = ${value}`);  

    return Reflect.set(...arguments);  

  }  

};  

  

const proxy = new Proxy(target, handler);  

  

console.log(proxy.foo); // 输出: Getting foo! 然后是 bar  

proxy.foo = 'baz'; // 输出: Setting foo = baz  

console.log(proxy.foo); // 再次输出: Getting foo! 然后是 baz

 

在这个例子中,handler 对象定义了两个捕获器:get 和 set。当尝试读取 proxy.foo 时,会触发 get 捕获器,并输出相应的日志。同样,当尝试设置 proxy.foo 的值时,会触发 set 捕获器,并输出相应的日志。

 

使用场景

Proxy 的使用场景非常广泛,包括但不限于:

 

数据绑定:自动更新 DOM 或其他数据表示,以响应对象的变化。

性能监控:在对象访问时记录日志,以便进行性能分析。

函数调用:拦截和修改函数调用,例如添加日志、权限检查等。

私有属性:通过捕获器控制对对象属性的访问,实现类似私有属性的效果。

Proxy 是一个非常强大的特性,它允许开发者以声明式的方式拦截和修改对象的操作,从而提供了高度的灵活性和控制力

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/891086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

雷电「模拟器」v9 最新清爽去广

前言 雷电模拟器9是基于安卓9内核开发的全新版本模拟器 安装环境 [名称]:雷电「模拟器」 [大小]:579MB [版本]:9.1.34 [语言]:简体中文 [安装环境]:Windows 通过网盘分享的文件:雷电模拟器 链接:…

大模型 API 接入初探

文章目录 大模型 API 接入初探一、使用大模型 API 的前置步骤(一)注册账户与获取凭证(二)理解 API 文档 二、三个常用 API(一)列出模型(二)FIM 补全(三)对话补…

ACPI PM Timer

ACPI PM Timer 概述: ACPI PM Timer是一个非常简单的计时器,它以 3.579545 MHz 运行,在计数器溢出时生成系统控制中断(SCI)。它精度较低,建议使用其他定时器,如HPET或APIC定时器。 检测ACPI P…

力扣--LCR 188.买卖芯片的最佳时机

题目 数组 prices 记录了某芯片近期的交易价格,其中 prices[i] 表示的 i 天该芯片的价格。你只能选择 某一天 买入芯片,并选择在 未来的某一个不同的日子 卖出该芯片。请设计一个算法计算并返回你从这笔交易中能获取的最大利润。 如果你不能获取任何利…

工业相机基本参数

分辨率(Resolution) 定义:分辨率指的是相机图像的像素数,通常以 宽度 x 高度 的形式表示,如 1920x1080 或 2592x1944。作用:分辨率越高,相机可以捕捉到更多的细节。高分辨率相机适用于需要精确…

实时在线翻译谷歌插件

Real - time Translation插件的安装 1、下载插件并解压 2、打开谷歌浏览器,在地址栏输入 “chrome://extensions/” 进入扩展程序页面. 3、开启页面右上角的 “开发者模式”. 4、点击 “加载已解压的扩展程序” 按钮,选择之前解压的文件夹,点…

torch.sparse_csc_tensor

torch.sparse_csc_tensor 以CSC格式构建一个稀疏张量。CSC格式的稀疏张量乘法运算通常比 COO 格式的稀疏张量更快。 CSC格式(Compressed Sparse Column Format)是一种存储稀疏矩阵的常用格式,它通过三个数组来表示稀疏矩阵: 非零…

C++ 设计模式:原型模式(Prototype Pattern)

链接:C 设计模式 链接:C 设计模式 - 工厂方法 链接:C 设计模式 - 抽象工厂 链接:C 设计模式 - 建造者模式 原型模式(Prototype Pattern)是一种创建型设计模式,它允许一个对象通过复制现有对象来…

C语言中的贪心算法

贪心算法(Greedy Algorithm)是一种在每一步选择中都采取当前最优解的算法,希望通过局部最优解的选择,最终得到全局最优解。它常用于解决最优化问题,如最小生成树、最短路径等。本文将从理论到实践,逐步引导…

区块链:概念与应用场景

一、区块链的定义 区块链是一种分布式账本技术,它以去中心化的方式存储数据,通过密码学保证数据的安全性和不可篡改性。 (一)分布式账本 账本结构:区块链可以看作是一个由多个节点共同维护的账本。这个账本是由一系列…

[数据集][图像分类]常见鱼类分类数据集2w张8类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):7554(剩余1w多为测试集) 分类类别数:…

uniapp开发小程序内嵌h5页面,video视频两边有细小黑色边框

1.问题如图 2.原因分析 是否为设置上述属性呢? 设置了,但是仍然有黑边。经过选中页面元素分析后,判断video元素本身就有这种特点,就是视频资源无法完全铺满元素容器。 3.解决方案

pod生命周期和pod的优雅终止

pod优雅终止 概念:当一个pod需要被终止时,系统会给予一定的时间窗口让pod内的应用程序完成正在处理的任务并安全地关闭,而不是立即强制终止。这样可以避免因突然终止而导致的数据丢失或服务中断 1. 发送终止信号: 当一个 pod 被…

Android 13 Launcher3 移除桌面抽屉入口

com.android.launcher3.taskbar.TaskbarView.updateHotseatItems // 移除任务栏抽屉入口 // if (mAllAppsButton != null) { // int index = Utilities.isRtl(getResources()) ? 0 : getChildCount(); // addView(mAllAppsButton, index)…

深度学习任务中的 `ulimit` 设置优化指南

深度学习任务中的 ulimit 设置优化指南 1. 什么是 ulimit?2. 深度学习任务中的关键 ulimit 设置2.1 max locked memory(-l)2.2 open files(-n)2.3 core file size(-c)2.4 stack size&#xff08…

【SpringMVC】SpringMVC 快速入门

通常,Web 应用的工作流程如下: 用户通过浏览器访问前端页面; 前端页面通过异步请求向后端服务器发送数据; 后端采用“表现层-业务层-数据层”三层架构进行开发: 表现层接收页面请求将请求参数传递给业务层业务层访问…

OpenGL变换矩阵和输入控制

在前面的文章当中我们已经成功播放了动画,让我们的角色动了起来,这一切变得比较有意思了起来。不过我们发现,角色虽然说是动了起来,不过只是在不停地原地踏步而已,而且我们也没有办法通过键盘来控制这个角色来进行移动…

【Spring MVC 核心机制】核心组件和工作流程解析

在 Web 应用开发中,处理用户请求的逻辑常常会涉及到路径匹配、请求分发、视图渲染等多个环节。Spring MVC 作为一款强大的 Web 框架,将这些复杂的操作高度抽象化,通过组件协作简化了开发者的工作。 无论是处理表单请求、生成动态页面&#x…

Verilog 过程赋值

关键词:阻塞赋值,非阻塞赋值,并行 过程性赋值是在 initial 或 always 语句块里的赋值,赋值对象是寄存器、整数、实数等类型。 这些变量在被赋值后,其值将保持不变,直到重新被赋予新值。 连续性赋值总是处…

[并发与并行] python如何构建并发管道处理多阶段任务?

文章目录 1. 背景&目标2. show me the code3.知识点4. 总结 1. 背景&目标 背景:一个任务可分为多个阶段(各个阶段非CPU密集型任务,而是属于IO密集型任务),希望每个阶段能够交给各自的线程去执行。 目标:构建支持多并发的…