es6新特性 - Proxy
一、定义
- 用于定义基本操作的自定义行为
二、本质
-
修改的是程序默认形为,就形同于在编程语言层面上做修改,属于元编程(meta programming)
-
Proxy 亦是如此,用于创建一个对象的代理,从而实现基本操作的拦截和自定义(如属性查找、赋值、枚举、函数调用等)
三、用法
-
Proxy为构造函数,用来生成Proxy实例
var proxy = new Proxy(target, handler)
-
参数:
-
target表示所要拦截的目标对象(任何类型的对象,包括原生数组,函数,甚至另一个代理))
-
handler通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时代理 p 的行为
-
四、使用场景
-
Proxy其功能非常类似于设计模式中的代理模式,常用功能如下:
-
拦截和监视外部对对象的访问
-
降低函数或类的复杂度
-
在复杂操作前对操作进行校验或对所需资源进行管理
-
-
使用 Proxy 保障数据类型的准确性:
- 声明了一个私有的 apiKey,便于 api 这个对象内部的方法调用,但不希望从外部也能够访问 api._apiKey
-
观察者模式(Observer mode)指的是函数自动观察数据对象,一旦对象有变化,函数就会自动执行:
- observable函数返回一个原始对象的 Proxy代理,拦截赋值操作,触发充当观察者的各个函数
-
观察者函数都放进Set集合,当修改obj的值,在会set函数中拦截,自动执行Set所有的观察者
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通