什么是 Proxy?

Proxy对象用于定义基本操作的自定义行为(如属性查找,赋值,枚举,函数调用等)。
其实就是在对目标对象的操作之前提供了拦截,可以对外界的操作进行过滤和改写,修改某些操作的默认行为,这样我们可以不直接操作对象本身,而是通过操作对象的代理对象来间接来操作对象,达到预期的目的~

  1. let obj = {
  2. name:{name:'hhh'},
  3. arr: ['吃','喝','玩']
  4. }
  5. //proxy兼容性差 可以代理13种方法 get set
  6. //defineProperty 只对特定 的属性进行拦截
  7. let handler = {
  8. get (target,key) { //target就是obj key就是要取obj里面的哪个属性
  9. console.log('收集依赖')
  10. return target[key]
  11. },
  12. set (target,key,value) {
  13. console.log('触发更新')
  14. target[key] = value
  15. }
  16. }
  17. let proxy = new Proxy(obj,handler)
  18. //通过代理后的对象取值和设置值
  19. proxy.arr
  20. proxy.name = '123'

在使用vuex的时候发现获取state的string number类型的变量时,是可以直接通过store.state.value 取到值的,但是在取对象的时候,控制台打印出来的是Proxy 对象,Proxy对象里边的[[Target]]才是真实的对象。

从vue里面取出来的虽然是proxy对象,但是也可以直接进行数组的操作,如splice,数组拓展等.