JavaScript – Proxy
参考
介绍和使用
Proxy 的作用是代理对象, 消费者不直接使用对象, 而是使用代理对象.
一般上做代理的目的就是想拦截对象访问做一些别的事情. 比如当对象改变以后, 同步 HTML.
基本用法:
interface Person {
name: string;
age?: number;
}
const person: Person = {
name: 'Derrick',
age: 11,
};
const proxy = new Proxy(person, {
get(target, prop: keyof typeof person, receiver) {
console.log(target === person); // true
console.log('prop', prop); // age
console.log('receiver', receiver === proxy); // true
return target[prop];
},
set(target, prop: keyof typeof person, value: typeof person[keyof typeof person], _receiver) {
(target as any)[prop] = value;
return true; // 在 'use strict' mode 中, 如果这里返回 false 则会报错
},
deleteProperty(target, p: keyof typeof person) {
delete target[p];
return true;
},
});
proxy.age = 15;
console.log(proxy.age);
delete proxy.age;
上面拦截了对象的 get set delete 访问. 当对象被 get set delete 时, Proxy 方法就会被触发.
可以获得真的对象, 被访问的属性, set 的值, 还有 Proxy 对象.
然后就可以做许多事情了.
注意 set, delete 必须返回 boolean. 如果返回 false 在 strict mode 下会报错.
TODO
上面有一些 TypeScript 的问题.
JavaScript – Proxy的更多相关文章
- [Javascript] Intercept property access with Javascript Proxy
A Javascript Proxy object is a very interesting es6 feature, that allows you to determine behaviors ...
- Javascript Proxy对象 简介
Javascript Proxy对象 简介 Javascript Proxy对象 改变你操作对象的方式 Proxies 是Javasript对象的中间件 ...或者说至少是那种很早的版本. ES6 中 ...
- JavaScript - proxy
Proxy 对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等). 来看看常用的方法 handler.get() let o = { name: 'liwenchi', age: 1 ...
- ArcGIS For JavaScript API 默认参数
“esri.config”的是在1.3版中的的“esriConfig”的替代品.如果您使用的是1.2或更低的版本,您应该参阅默认API v1.2和更低的配置.对于版本1.3或更高版本,您可以使用“es ...
- ArcGIS api for javascript——以地理处理结果为条件查询地图
这里发生什么任务呢?当第一次单击地图,单击的坐标被发送到一个Geoprocessor任务.该任务访问服务器上的通过ArcGIS Server 地理处理服务提供的可用的GIS模型.本例中模型计算驱动时间 ...
- ArcGIS api for javascript——用缓存区查询地图
描述 本例展示了如何在另外一个任务里使用一个任务的结果.单击地图查看被单击的点的1公里范围内的缓存(如果需要可以修改这个默认的缓存距离).也可以看缓存区的这些点的人口普查街区信息.单击一个点查看更多的 ...
- 2018 – 2019 年前端 JavaScript 面试题
JavaScript 基础问题 1.使以下代码正常运行: JavaScript 代码: const a = [1, 2, 3, 4, 5]; // Implement this a.multiply( ...
- JavaScript 设计模式及代码实现——代理模式
代理模式 1 定义 为其他对象提供一种代理以控制对这个对象的访问 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 2 应用举例 2.1 缓 ...
- [Architect] ABP(现代ASP.NET样板开发框架) 翻译
所有翻译文档,将上传word文档至GitHub 本节目录: 简介 代码示例 支持的功能 GitHub 简介 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目) ...
- ABP框架系列之八:(Introduction-介绍)
Introduction We are creating different applications based on different needs. But implementing commo ...
随机推荐
- 3.1 Y86-64指令集体系结构
程序员可见的状态 这里的程序员即可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器.程序员可见的状态如下,有15个程序寄存器(%rax,%rbx等),三个一位的条件(ZF,OF,SF) ,程序 ...
- css3 动画插件Animate.css
官网:https://animate.style/ GitHub:https://github.com/daneden/animate.css
- 基于微信小程序的校园维修管理系统-开题报告参考
\n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 一.课题研究的目的和意义** 本研究开发基于微信小程序的物品维修系统,它不仅能实现专业的维 ...
- 机器学习:详解迁移学习(Transfer learning)
详解迁移学习 深度学习中,最强大的理念之一就是,有的时候神经网络可以从一个任务中习得知识,并将这些知识应用到另一个独立的任务中.所以例如,也许已经训练好一个神经网络,能够识别像猫这样的对象,然后使用那 ...
- Docker 容器开发:虚拟化
Docker 容器开发:虚拟化 Docker 的核心价值在于虚拟化或者说环境隔离[通过虚拟化技术实现虚拟环境],解决环境配置和部署的依赖问题实现解耦 我对虚拟化的理解源自<Operating S ...
- SpringBoot2.7 霸王硬上弓 Logback1.3 → 不甜但解渴
开心一刻 一大早,她就发消息质问我 她:你给我老实交代,昨晚去哪鬼混了? 我:没有,就哥几个喝了点酒 她:那我给你打了那么多视频,为什么不接? 我:不太方便呀 她:我不信,和你哥们儿喝酒有啥不方便接视 ...
- android:inputType 类型详细介绍
//文本类型,多为大写.小写和数字符号.android:inputType="none"//输入普通字符android:inputType="text"//输入 ...
- 【ElasticSearch】04 Spring-Data-ElasticSearch
官方网站: https://spring.io/projects/spring-data-elasticsearch 对应 Elasticsearch7.6.2,Spring boot2.3.x 一般 ...
- 【Kafka】02 原生集群部署
基于大数据教程的环境: 192.168.101.11 centos7-01 192.168.101.12 centos7-02 192.168.101.13 centos7-03 搭建Kafka环境需 ...
- 中国特供版4090D已经开始发售
由于美国政府的限制,NVIDIA公司等美国公司不允许向中国出口4090显卡,但是为了绕过美国政府的限制NVIDIA公司推出了中国特供版的4090D显卡. 4090d显卡和4090显卡区别大吗?可以说其 ...