当前位置: 首页 > wzjs >正文

大连旅顺口区疫情最新消息惠州企业网站seo

大连旅顺口区疫情最新消息,惠州企业网站seo,做集团网站应注意什么,域名注册信息怎么查红宝书第二十讲:详解JavaScript的Proxy与Reflect 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、Proxy的作用:给对象戴上“监听耳机” Proxy(代理)允许你为对象…

红宝书第二十讲:详解JavaScript的Proxy与Reflect

资料取自《JavaScript高级程序设计(第5版)》。
查看总目录:红宝书学习大纲


一、Proxy的作用:给对象戴上“监听耳机”

Proxy(代理)允许你为对象创建代理层,拦截并自定义对象的基本操作(如属性读写、函数调用等)。核心用法:

  • 通过new Proxy(target, handler)创建代理对象
  • handler对象定义各种监听方法(称为陷阱/trap)1[^2]
示例1:拦截属性读取
// 创建目标对象
const target = { name: '小明', age: 18 };// 定义代理处理器(拦截读取)
const handler = {get(target, property) {console.log(`有人在读取属性:${property}`);return Reflect.get(...arguments); // 利用Reflect执行默认操作}
};// 创建代理对象
const proxy = new Proxy(target, handler);console.log(proxy.name); // 输出:有人在读取属性 name → 小明

1: 资料1说明Proxy是目标对象的抽象层
2: 资料3展示使用Reflect执行默认行为


二、常见拦截操作(陷阱)

Handler对象可以定义多种陷阱,常用方法:

  • get() → 拦截属性读取
  • set() → 拦截属性设置
  • apply() → 拦截函数调用
  • has() → 拦截in操作符
示例2:拦截属性写入并进行验证
const validator = {set(target, prop, value) {if (prop === 'age' && typeof value !== 'number') {throw new Error('年龄必须是数字!');}return Reflect.set(target, prop, value); // 通过Reflect正确设置值}
};const proxy = new Proxy({}, validator);
proxy.age = 20;  // 正常
proxy.age = '20';// 抛出错误:年龄必须是数字!

3: 资料4说明陷阱如何配合Reflect使用


三、Reflect:Proxy的最佳搭档

Reflect API提供与Proxy陷阱同名的方法,用于执行默认操作24。优势:

  • 避免手动处理底层对象
  • 保持代码简洁性
示例3:简化代理的默认行为
// 完全透传的代理(所有操作自动反射到目标对象)
const target = { secret: 'test123' };
const proxy = new Proxy(target, Reflect); // 直接使用Reflect处理所有陷阱console.log(proxy.secret); // test123(所有操作原样执行)

4: 资料6演示通过Reflect创建透传式代理


四、核心应用场景
  1. 数据验证(如示例2中的年龄验证)
  2. 日志记录(记录属性访问或修改)
  3. 动态扩展功能(自动生成属性或方法)
示例4:记录数组push操作
const array = [];
const handler = {get(target, prop) {if (prop === 'push') {return function(...args) {console.log(`添加了元素:${args}`);return Reflect.apply(target[prop], target, args); // 调用原始的push方法};}return Reflect.get(...arguments);}
};const proxyArray = new Proxy(array, handler);
proxyArray.push(1, 2); // 输出:添加了元素:1,2 → 数组变为[1,2]

3: 资料4展示如何通过代理拦截数组方法


五、注意事项与规则
  • 必须遵守陷阱不变式(Trap Invariants)→ 例如.defineProperty()必须返回布尔值 5
  • 代理无法完全模拟目标对象(如某些内部属性无法拦截)1
示例5:陷阱不变式错误
const handler = {defineProperty() { // 未正确返回布尔值console.log('尝试定义属性');// 未调用Reflect.defineProperty}
};const proxy = new Proxy({}, handler);
Object.defineProperty(proxy, 'foo', { value: 'bar' }); // 抛出TypeError

5: 资料5指出未正确使用Reflect方法可能导致错误


流程图:Proxy与Reflect协作流程


目录:总目录
上篇文章:红宝书第十九讲:详解JavaScript的Fetch API与Ajax请求
下篇文章:红宝书第二十一讲:详解JavaScript的模块化(CommonJS与ES Modules)

脚注


  1. 《JavaScript高级程序设计(第5版)》说明Proxy是目标对象的抽象层 ↩︎ ↩︎ ↩︎

  2. 《JavaScript高级程序设计(第5版)》展示Reflect方法简化默认操作 ↩︎ ↩︎

  3. 《JavaScript高级程序设计(第5版)》演示如何拦截数组的push操作 ↩︎ ↩︎

  4. 《JavaScript高级程序设计(第5版)》提供使用Reflect创建透传代理的示例 ↩︎ ↩︎

  5. 《JavaScript高级程序设计(第5版)》指出陷阱方法需遵守严格规则 ↩︎ ↩︎

http://www.dtcms.com/wzjs/208584.html

相关文章:

  • 深圳电子商城网站建设优化品牌seo关键词
  • 网站建设新闻发布注意什么武汉网站维护公司
  • 58同城做网站推广好不好拼多多seo怎么优化
  • 网站开发需要什么seo云优化
  • 使用php做的学校网站吗app推广拉新工作可靠吗
  • 眉山网站制作怎么有自己的网站
  • 外国人在中国做美食视频网站sem是什么的英文缩写
  • 前端开发模板无锡整站百度快照优化
  • 陕西宏远建设集团网站宁波关键词优化平台
  • 临武县网站建设seo关键词如何布局
  • 创新的企业网站建设seo在线教程
  • 佛山网站建设维护深圳疫情最新情况
  • 企业网站推广营销如何做好百度推广
  • 一般网站banner尺寸是多少钱优化关键词首页排行榜
  • 做网站哪个最好网络营销公司
  • 网站开发菜鸟教程网络营销技巧
  • 西安做公司网站公司重庆网站排名优化教程
  • 英雄联盟网站源码合肥网站建设优化
  • 网站内容建设的核心和根本是高质量内容的重要性
  • 做北美市场的外贸网站友情链接交换系统
  • 有关设计的网站陕西网页设计
  • web前端做网站项目赚钱网站营销网站营销推广
  • 服务器租用后怎么使用seosem是什么职位
  • 通过网站做外贸网站搜索引擎优化的步骤
  • 在ps中网站界面应做多大浙江seo博客
  • 网站服务器物理地址怎么查关键字优化
  • 看不到的网站东莞seo公司
  • 做网站管理系统客服外包平台
  • 平面设计排版seo推广优化服务
  • 龙岗二职seo云优化软件