ES proxy和Reflect

本文介绍了JavaScript中的Proxy和Reflect,详细解释了它们的作用和使用方式。Proxy作为对象的代理,可以拦截并定制访问和修改对象的行为,包括get()和set()等操作。Reflect则提供了一种更函数式的方法来执行这些操作,同时改进了一些Object方法的返回结果。通过Proxy和Reflect,开发者可以更好地控制对象的访问和修改行为。
摘要由CSDN通过智能技术生成

什么是Proxy

proxy翻译过来是代理,它也确实起了代理的作用,代理了我们访问对象的行为。

代理就像是一样中间人,我们的行为都是通过中间人来传递话。至于中间人会不会对我们的行为进行处理以及怎么处理,那是在代理中设定的。

new Proxy('被设置代理的对象',option)

一个代理由两部分组成,第一部分就是被设定代理的对象,另外一部分就是代理对于访问者的行为进行如何处理

行为分类

1.get()
拦截对某个属性的访问操作,他有两个参数第一个是对象,第二个是属性

new Proxy({},{
get(){}})

2.set()
拦截对某个属性的修改,他有三个参数第一个是对象,第二个是属性,第三个是新值

还有一些行为等需要的再去看看如何操作

this指针指向问题

假设我们再对proxy对象的行为不做处理的时候,通过proxy访问一个属性,这个属性可能与我们直接通过实例访问属性不一致,这个不一致来自于this指针的不一致,this指针在通过proxy实例访问的时候是指向proxy实例。

Reflect

首先要明确一个概念,Reflect是一个静态对象,不要我们实例化也不需要我们修改,我们只是使用上面的方法

Reflect设计目的

1.将Object上面明显属于语言内部的方法(这个词语的定义暂时没有找到好的描述)移交到Reflect,同时后续对Object添加的新api也移交到Reflect上,相当于它们两是交集的关系

2.和Proxy结合起来,Proxy上面有很多行为,这些行为都可以通过Reflect上的方法调用起来

success = Reflect.set(target,name, value);

比如这样就调用了一次设置属性的方法,target写入为Proxy对象,那么为属性

3.将一些操作变成函数式的,举几个例子

delete a.age
'name' in a

这两个方法一个是删除属性,一个是判断属性是否在某个对象
转换时候就变成Reflect.has(),Reflect.deleteProperty().

实际上也和目的2相呼应了

4.修改某些Object方法的返回结果,让其变得更合理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值