最近忙于开发地图组件库,没有进行什么系统的学习,导致没什么可写的,今天在处理一个奇怪的难点时,感觉很有收获,写篇文章记录一下。
首先说一下出现的具体问题,其实是使用ECharts集成地图过程中,有部分需求需要获取ECharts上定义的全部事件,可是问题在于,ECharts并未提供监听的全部事件集合,而我们开发echarts对象可能在多个页面出现,甚至是不同的开发者写的监听事件。所以,如何在使ECharts中的监听方法.on() 一执行,便将该事件加入统计。
幸好我前面看过某个通过代理给addEventListener添加附加行为的一个学习视频,所以我自然而然的想到了通过Proxy代理的方式重写echarts的.on()方法。
这里我们先说一下Proxy,他是es6中新增的,用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程。Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。我的理解:他就是 租房中介 ,他从房东手里拿到房子(目标对象),然后自己装修(设置拦截),装修后再租给别人。