《JavaScript高级程序设计》读书笔记 34 - 代理基础

article/2025/7/28 2:55:37

感谢点赞、关注和收藏!

上一篇类,这一篇进入书的第 9 章 - 代理与反射,首先是代理基础。

代理基础

        代理是目标对象的抽象。从很多方面看,代理类似 C++指针,因为它可以用作目标对象的替身,但又完全独立于目标对象。目标对象既可以直接被操作,也可以通过代理来操作。但直接操作会绕过代理施予的行为。
创建空代理
        代理是使用 Proxy 构造函数创建的。这个构造函数接收两个参数:目标对象和处理程序对象。缺少其中任何一个参数都会抛出 TypeError。要创建空代理,可以传一个简单的对象字面量作为处理程序对象,从而让所有操作畅通无阻地抵达目标对象。
        如下面的代码所示,在代理对象上执行的任何操作实际上都会应用到目标对象。唯一可感知的不同就是代码中操作的是代理对象。
const target = {id: "target",
};
const handler = {};
const proxy = new Proxy(target, handler);
// id 属性会访问同一个值
console.log(target.id); // target
console.log(proxy.id); // target
// 给目标属性赋值会反映在两个对象上
// 因为两个对象访问的是同一个值
target.id = "foo";
console.log(target.id); // foo
console.log(proxy.id); // foo
// 给代理属性赋值会反映在两个对象上
// 因为这个赋值会转移到目标对象
proxy.id = "bar";
console.log(target.id); // bar
console.log(proxy.id); // bar
// hasOwnProperty()方法在两个地方
// 都会应用到目标对象
console.log(target.hasOwnProperty("id")); // true
console.log(proxy.hasOwnProperty("id")); // true
// Proxy.prototype 是 undefined
// 因此不能使用 instanceof 操作符
console.log(target instanceof Proxy); // TypeError: Function has non-object prototype 'undefined' in instanceof check
console.log(proxy instanceof Proxy); // TypeError: Function has non-object prototype 'undefined' in instanceof check
// 严格相等可以用来区分代理和目标
console.log(target === proxy); // false
定义捕获器
        使用代理的主要目的是可以定义捕获器(trap)。捕获器就是在处理程序对象中定义的“基本操作的拦截器”。每个处理程序对象可以包含零个或多个捕获器,每个捕获器都对应一种基本操作,可以直接或间接在代理对象上调用。每次在代理对象上调用这些基本操作时,代理可以在这些操作传播到目标对象之前先调用捕获器函数,从而拦截并修改相应的行为。
下面我们举个例子来应用 get() 捕获器:
const target = { foo: 'bar' 
}; 
const handler = { // 捕获器在处理程序对象中以方法名为键get() { return 'handler override'; } 
}; 
const proxy = new Proxy(target, handler); 
console.log(target.foo); // bar 
console.log(proxy.foo); // handler override 
console.log(target['foo']); // bar 
console.log(proxy['foo']); // handler override 
console.log(Object.create(target)['foo']); // bar 
console.log(Object.create(proxy)['foo']); // handler override
捕获器参数和反射 API

http://www.hkcw.cn/article/hyXEZaINGe.shtml

相关文章

《计算机仿真》——引领计算机仿真领域的学术前沿

期刊名称:计算机仿真 (Computer Simulation) 主办单位:中国航天科工集团公司第十七研究所 出版周期:月刊 出版地:北京市 语种:中文 开本:大16开 ISSN:1006-9348 CN:11-3724/TP 邮发代…

java-文件IO

文件IO 操作系统有一个专门的模块-文件系统,来管理文件。并提供了 api 供我们使用。 文件系统 使用 N叉树 来组织文件。 操作系统使用 “路径” 来描述文件的位置。路径的表示又分为 绝对路径 和 相对路径 绝对路径 :从树的的根节点(Wind…

数据基座觉醒!大数据+AI如何重构企业智能决策金字塔(上)

1. 数据金字塔的千年进化史 1.1 从地窖到云端的存储革命 某家电企业在2010年遭遇库存危机时,市场部门需要三天才能从纸质单据中统计出全国滞销型号。当他们的数据工程师在2023年轻声唤醒对话式分析机器人,同样的需求响应时间缩短至9秒。 数据分层架构的…

【MySQL】事务及隔离性

目录 一、什么是事务 (一)概念 (二)事务的四大属性 (三)事务的作用 (四)事务的提交方式 二、事务的启动、回滚与提交 (一)事务的启动、回滚与提交 &am…

秒出PPT正式改名秒出AI,开启AI赋能新体验!

在现代办公环境中,借助智能工具提升工作效率已经成为趋势。秒出AI作为一款集AI PPT制作、动画、巨幕、视频、设计以及智能简历功能于一体的综合办公平台,为用户提供一站式智能内容生成解决方案,极大地简化了内容创作流程。 1. AI驱动的一键P…

白皮精读:214页数据安全治理白皮书6.0【附全文阅读】

《数据安全治理白皮书6.0》由中关村网络安全与信息化产业联盟数据安全治理专业委员会编著,北京安华金和科技有限公司参与。数据安全治理在数字化时代至关重要,关乎组织的生存与发展、个人信息权益保障以及国家的安全与稳定。这份白皮书围绕数据安全治理展…

工商业储能站能量管理系统

Acrel-2000MG 储能能量管理系统是安科瑞专门针对工商业储能 电站研制的本地化能量管理系统,可实现了储能电站的数据采集、数 据处理、数据存储、数据查询与分析、可视化监控、报警管理、统计 报表、策略管理、历史曲线等功能。其中策略管理,支持多种控制…

【JUC】深入解析 JUC 并发编程:单例模式、懒汉模式、饿汉模式、及懒汉模式线程安全问题解析和使用 volatile 解决内存可见性问题与指令重排序问题

单例模式 单例模式确保某个类在程序中只有一个实例,避免多次创建实例(禁止多次使用new)。 要实现这一点,关键在于将类的所有构造方法声明为private。 这样,在类外部无法直接访问构造方法,new操作会在编译…

智慧健康养老服务与管理实训室建设方案框架:服务流程与管理模式实训

随着智慧健康养老产业的快速发展,构建契合行业需求的实训室成为培养专业人才的关键。智慧健康养老服务与管理实训室建设方案聚焦服务流程与管理模式实训,旨在通过系统化设计,让学习者在仿真场景中掌握智慧健康养老服务的全链条操作与现代化管…

KEIL 编译器高级使用与调试技巧【一】 手工编译、编译选项、预处理分析

一、手工编译bin文件 1.1 KEIL 自带的编译组件 ARM v6编译器(Arm Compiler for Embedded)包含以下几个工具: armclang 编译器和汇编器,可对 C、C 汇编文件进行编译和汇编 armlink 链接器,用于将目标文件和库文件进…

XUANYING炫影-移动版-智能轻云盒SY900Pro和SY910_RK3528芯片_免拆机通刷固件包

XUANYING炫影-移动版-智能轻云盒SY900Pro和SY910_RK3528芯片_免拆机通刷固件包 智能轻云盒SY900Pro 智能轻云盒SY910 不要刷电信版的! 不要刷电信版的! 不要刷电信版的! 固件说明: 这是一个亲测的固件。 1、默认开启 ADB功能。…

MySQL + CloudCanal + Iceberg + StarRocks 构建全栈数据服务

简述 在业务数据快速膨胀的今天,企业对 低成本存储 与 实时查询分析能力 的需求愈发迫切。 本文将带你实战构建一条 MySQL 到 Iceberg 的数据链路,借助 CloudCanal 快速完成数据迁移与同步,并使用 StarRocks 完成数据查询等操作&#xff0c…

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.13 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.13 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图。 dataframe<-data.frame( yc(36,18,30,39,20…

Excel 中的SUMIFS用法(基础版),重复项求和

1. 首先复制筛选条件所在的列&#xff0c;去除重复项目 数据 》重复项 》删除重复项 2. 输入函数公式 SUMIFS(C:C,A:A,E2) 3. 选中单元格&#xff0c;通过 ShiftF3 查看函数参数 第一个参数&#xff1a;求和区域&#xff0c;要累加的值所在的区域范围 第二个参数&#xff1a…

HCIP:MPLS静态LSP的配置及抓包

目录 一、MPLS的简单的一些知识点 1.MPLS的概述&#xff1a; 2.MPLS工作原理&#xff1a; 3.MPLS的核心组件&#xff1a; 4. MPLS标签 5.MPLS标签的处理 6.MPLS转发的概述&#xff1a; 7.MPLS的静态LSP建立方式 二、MPLS的静态LSP的实验配置 1.配置接口的地址和配置OS…

世冠科技亮相中汽中心科技周MBDE会议,共探汽车研发数字化转型新路径

近日&#xff0c;中汽中心2025年科技周MBDE前沿应用主题会议在天津成功举办。本次会议以“智汇津门共探MBDE前沿应用新征程”为主题&#xff0c;聚焦基于模型的数字工程&#xff08;MBDE&#xff09;方法论在汽车复杂系统研发中的创新实践与跨领域协同&#xff0c;旨在推动行业…

Linux之Nginx配置篇

一、Ngixn核心重点 Nginx是一款功能强大HTTP和反向代理服务器&#xff0c;目前大部分公司用于使用其Web服务器 在Nginx还未出世之前都是在使用比较传统Apache服务器&#xff0c;两则都能处理Web请求,但是后者处理效率更高、包括其负载均衡&#xff0c;反向代理功能都很强&#…

RAG混合检索:倒数秩融合RRF算法

文章目录 检索增强生成 (RAG)倒数秩融合在 RAG 中的工作原理RRF 背后的数学直觉检索增强生成 (RAG) RAG 是自然语言处理中的一种强大技术,结合了基于检索的模型和生成模型的优势。 如果检索器未能从检索器中获取相关文档,则精度较低,幻觉的可能性会增加。 有些查询适合…

2023年09月GESPC++二级真题解析(含视频)

视频讲解&#xff1a;GESP2023年9月二级C真题讲解 一、单选题 第1题 解析&#xff1a; 答案D&#xff0c;第一台用的就是电子管 第2题 解析&#xff1a; 答案B&#xff0c;x>y不符合条件&#xff0c;执行ay,bx&#xff0c;输出a、b&#xff0c;即输出y、x&#xff0c;也…

STUSB4500 PPS(PD3.0)快充SINK模块——应用 解析

0 前言 朋友参加车展&#xff0c;收获一枚很漂亮的倍思65W氮化镓快充头&#xff0c;送给我了。 我看了手中只支持33W快充的三星陷入了沉思… 快充头支持PPS协议&#xff0c;我心思这玩意适合做可调电源啊&#xff01; 上网随便一查没查到&#xff0c;都是转换成5V、9V、12V等…