快来围观一下JavaScript的Proxy

的确写Proxy文章很多,那么今天我也不凑字数了,炒两个栗子吧。

一、虚拟属性

  const person = {

    name: 'xiaoyun',

    province: '江苏省',

    city: '南京市'

  }

对于上述对象,我们可能需要地址信息(由省市拼接而成),在此之前我们可能会采取下列方式:

直接在person对象上声明一个address属性;

当用到address信息时,再通过person拼接。

第一个方法的主要弊端是污染了原有的对象,而第二种方法就很不灵活。现在我们可以通过Proxy实现比较好的效果:

  const enhancePerson = new Proxy(person, {

    get (target, name) {

      switch (name) {

        case 'address':

          return `${target['province']}-${target['city']}`

        default:

          return target[name]

      }

    }

  })

  enhancePerson.address // 江苏省-南京市

通过这种方式我们就可以实现虚拟属性了,因为它不会被遍历出来:

  Object.keys(enhancePerson) // [ 'name', 'province', 'city' ]

这里还有一个我觉得比较容易忽略的点:


>>>阅读全文

你可能感兴趣的:(快来围观一下JavaScript的Proxy)