当前位置: 首页 > 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/399822.html

相关文章:

  • 武夷山建设局网站高端网站定制开发
  • 广州网站制作公司百度权重5的网站能卖多少钱
  • 惠州城乡和住房建设局网站防疫优化措施
  • 网站承接广告宣传方案产品软文模板
  • 济南 营销型网站seo服务公司招聘
  • 建设文库网站揭阳seo推广公司
  • 沧州做网站推广公司网站seo博客
  • 如何查看网站开发单位百度推广官方
  • 网站开发求职信网络销售管理条例
  • 西安做网站的公司报价b2b有哪些电商平台
  • 手机网站自适应布局怎么做百度今日数据
  • 做分析图的网站怎样做一个网站平台
  • 珠海网站建设q.479185700強房产网站模板
  • 网站建设支出账务处理打开百度官网
  • 国内有多少家做网站的企业国外网站谷歌seo推广
  • 做响应式网站图片需要做几版安徽网络建站
  • 做淘宝客网站域名是别人的软文代写价格
  • 外贸公司如何做网站网络推广服务合同范本
  • 北仑网站制作谷歌商店app下载
  • 哪个网站财经做的最好厦门seo排名外包
  • 怎么做自己的公司网站推广赚钱app排行榜
  • wordpress 跳转 计数合肥网站推广优化公司
  • 网站建设大概要多少钱成人零基础学电脑培训班
  • 导航网站开发工具seo网站排名后退
  • 精品课程网站建设方案优化是什么梗
  • 做花瓶的网站余姚网站制作公司
  • 动态网站开发基础教程期末习题网络营销是做什么的工作
  • 常州专业网站建设公司国家免费培训机构
  • 软件开发网站建设网络营销与传统营销有哪些区别
  • wordpress建站两秒打开seo概念的理解