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

简单地理解,就是在目标对象之前假设一层“拦截”,外界对改对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤。基本就想字面意思:代理。

1.概述

  es 6 原生提供 Proxy 构造函数,用来生成 Proxy 实例。

var proxy = new Proxy(target, handler);

  其中,target、handler 均为对象,target 指目标对象(需要拦截的),handler 中定义拦截行为。

var obj = new Proxy({}, {
get: function (target, key, receiver) {
console.log(`getting ${key}!`); // es 6 新増的字符串拓展写法
return Reflect.get(target, key, receiver);
},
set: function (target, key, value, receiver) {
console.log(`setting ${key}!`);
return Reflect.set(target, key, value, receiver);
}
}); obj.count = 1
// setting count!
++obj.count
// getting count!
// setting count!
// 2

二、支持的拦截操作

  一共有13中拦截操作,具体移步 Proxy 概述 。这里解释 api 中几个参数的含义:

    target : 目标对象,简单来说就是 new Proxy(target, handler) 中的 target 对象;

    propKey : 这个解释起来有点复杂,理解很容易,如上例中的 count 就是 propKey;

    value : 同样拿上例来看,obj.count = 1 , 那么 value 就是 1;

    receiver : 就是 new 出来的 Proxy 对象本身;

  this 指针的指向变化:

    一旦 proxy 代理了目标对象(target),那么 target 对象中的 this ,就指向了 proxy 对象,而不在指向 target 对象:

const target = {
m: function () {
console.log(this === proxy);
}
};
const handler = {}; const proxy = new Proxy(target, handler); target.m() // false
proxy.m() // true

最新文章

  1. Python文本处理nltk基础
  2. DelphiXE10.1项目中增加预编译的方法
  3. 探索C#之虚拟桶分片
  4. Intent属性详解一 component属性
  5. mysql单表多timestamp的current_timestamp设置问题
  6. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.8.Datepicker控件
  7. SharePoint 2016 的新特性概览(二)(What's New for IT Professionals in SharePoint Server 2016)
  8. sql 对一张表进行按照不同条件进行多次统计
  9. Tomcat线程池,更符合大家想象的可扩展线程池
  10. 辗转相除法_欧几里得算法_java的实现(求最大公约数)
  11. hdu2531之BFS
  12. hibernate 非xml实体类配置方法!
  13. VueJS使用笔记
  14. Maven 搭建 SSM 项目 (oracle)
  15. Java高级应用简笔
  16. SQL Server 中如何移动tempdb到新的位置
  17. logstash数据处理示例
  18. crontab使用说明及例子程序
  19. Shell while
  20. Linux 网络流量查看 Linux ip traffic monitor

热门文章

  1. Groovy语言学习--语法基础(4)
  2. iOS开发简记(6):storyboard的使用
  3. 如何在C#中使用Dapper(译)
  4. H5 文本属性
  5. vuex状态管理工具
  6. Glad to see you! CodeForces - 810D (交互+二分)
  7. python三数之和
  8. Java工具类——UUIDUtils
  9. Java面试题详解一:面向对象三大特性
  10. 多线程系列之十一:Two-Phase Termination模式