上犹电脑信息网我们一直在努力
您的位置:上犹电脑信息网 > 设置问题 > ES6对象拦截器 Proxy-ccproxy设置

ES6对象拦截器 Proxy-ccproxy设置

作者:上犹日期:

返回目录:设置问题

文章参考阮一峰大佬的ES6标准入门:http://es6.ruanyifeng.com/#docs/proxy

概述

Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。

Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。

什么是Proxy

大驼峰命名法,Proxy 是一个构造函数;var proxy = new Proxy(target, handler);其中,new Proxy()表示生成一个Proxy实例,target参数表示所要拦截的目标对象handler参数也是一个对象,用来定制拦截行为。

eg:

ES6对象拦截器 Proxy

上面代码中,作为构造函数,Proxy接受两个参数。第一个参数是所要代理的目标对象。

即如果没有Proxy的介入,操作原来要访问的就是这个对象;

第二个参数是一个配置对象,对于每一个被代理的操作,需要提供一个对应的处理函数,该函数将拦截对应的操作。比如,上面代码中,配置对象有一个get方法,用来拦截对目标对象属性的访问请求(对于不同的对象操作,都有着不同的拦截方法,后面会讲到的)。

get方法的两个参数分别是目标对象(即Proxy构造函数代理的那个对象)和所要访问的属性。

嗯~,这样解释可能有点坑,我把打印出来吧~

ES6对象拦截器 Proxy

从图中我们可以看到,本来应该访问到的 proxy.name 结果为 undefined。这是因为我没有给 get 方法设置返回值。当我们设置返回值时:

ES6对象拦截器 Proxy

ES6对象拦截器 Proxy

注意,要使得Proxy起作用,必须针对Proxy实例(上例是proxy对象)进行操作,而不是针对目标对象(上例是空对象)进行操作(对象是引用类型的,也就是说,当 proxy 对象发生改变时,obj 也会随之变化)。

eg:

ES6对象拦截器 Proxy

可以看出来,proxy中的方法并没有触发~

如果 handler(第二个参数) 没有设置任何拦截,那就等同于直接通向原对象。

ES6对象拦截器 Proxy

上面代码中,handler是一个空对象,没有任何拦截效果,访问 proxy 就等同于访问 target

其实get方法 中有三个参数:依次为目标对象、属性名和 proxy 实例本身(严格地说,是操作行为所针对的对象),其中最后一个参数可选。

另一个对象拦截读取操作的例子:

eg:

ES6对象拦截器 Proxy

ps : in 运算符 如果指定的属性在指定的对象或其原型链中,则in 运算符 返回 true ,否者返回 false。

ES6对象拦截器 Proxy

set方法

set 方法用来拦截某个属性的赋值操作,可以接受四个参数,依次为目标对象、属性名、属性值和 Proxy 实例本身,其中最后一个参数可选。

ES6对象拦截器 Proxy

我们在拦截了之后如果不进行处理,则属性是无法赋值到对象身上的。

ES6对象拦截器 Proxy

正常处理:

ES6对象拦截器 Proxy

设置一个只接受布尔值的对象拦截器:

ES6对象拦截器 Proxy

ES6对象拦截器 Proxy

上面代码中,由于设置了存值函数 set,任何不符合要求的属性赋值,都会抛出一个错误,这是数据验证的一种实现方法。利用 set 方法,可以对当前函数进行监听,即每当目标对象发生改变时触发。

ES6对象拦截器 Proxy

apply()

apply方法拦截函数的调用、call和apply操作。

apply方法可以接受三个参数,分别是目标对象(函数本身)目标对象的上下文对象(this)和目标对象的参数数组(实参列表)。

en~,把它当做函数拦截器好理解一点!

ES6对象拦截器 Proxy

如图所示,Proxy构造函数的第一个参数填的是 要拦截的目标函数,第二个跟以前一样是一个对象,用来定制拦截行为。

ES6对象拦截器 Proxy

上面代码中,变量 p Proxy 的实例,当它作为函数调用时(p()),就会被 apply 方法拦截,返回一个字符串。

除此之外,还有很多拦截器方法需要大家去学校,但是基本上大同小异。

ES6对象拦截器 Proxy

阮一峰ECMAScript 6 入门:http://es6.ruanyifeng.com/#docs/proxy

相关阅读

  • JSP 隐式对象-如何打开jsp文件

  • 上犹文件问题
  • 如何打开jsp文件,JSP隐式对象是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明。JSP隐式对象也被称为预定义变量。
关键词不能为空
极力推荐

电脑蓝屏_电脑怎么了_win7问题_win10问题_设置问题_文件问题_上犹电脑信息网

关于我们