Proxy用法——让咱们建立一个API代理器

什么是Java Proxy?api

MDN对Proxy 的定义是:数组

Proxy对象用于定义基本操做的自定义行为(如属性查找、赋值、枚举、函数调用等)。服务器

通俗的将,Proxy对象是目标对象的一个代理器,任何对目标对象的访问,都必须经过该代理器。所以咱们能够对外界的访问进行过滤改写等操做。函数

语法
图片描述
target-用Proxy包装的目标对象(能够是任何类型的对象,包括原生数组、函数,甚至另外一个代理)。post

handler-一个对象,其属性是当执行一个操做时定义代理的行为函数。url

简单的示例spa

假设如今咱们要访问一个对象的属性,若是该属性存在,打印该属性的值,不然报错。在没有Proxy对象以前,咱们须要使用额外的方法来实现。以下:3d

图片描述

上述代码虽然能够实现预期的功能,但若是咱们能把检查属性是否存在的逻辑放到别的地方,会让咱们更好的集中在业务逻辑代码上。这个时候咱们就能够使用Proxy,下面让咱们使用Proxy实现上面的功能。代理

图片描述

咱们给user对象添加了一个代理器,访问任何user的属性都会被代理器拦截,而后检查被访问的属性是否存在,若是存在就返回该属性值,不然报错。这样咱们就能够在printUser方法中专心写与业务逻辑相关的代码了。对象

下面是另外一个例子,咱们在给对象属性赋值时进行拦截操做。

图片描述

API代理器

最后,咱们来看一个稍微复杂一点的例子,使用Proxy封装一个api对象,这里为了简介只写了get方法和post方法。

图片描述

在handler对象中,set拦截操做能够阻止咱们对api对象从新赋值,deleteProperty拦截操做能够阻止咱们删除api对象的属性。经过get拦截操做,给api对象添加两个方法get和post,在调用这两个方法时会验证请求url或者data,最后根据服务器响应返回一个Promise对象。下面是使用get方法示例:

图片描述

因此,当咱们想要控制对象的某些默认行为时,就能够考虑使用Proxy。

相关文章
相关标签/搜索