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