ECMAScript 6.0 对象代理

2019-11-05  本文已影响0人  张思学

ES6规范定义了一个全新的全局构造函数:代理(Proxy)
Proxy用于修改某些操作的默认行为,也可以理解为在目标对象之前架设一层拦截,外部所有的访问都必须先通过这层拦截,因此提供了一种机制,可以对外部的访问进行过滤和修改。这个词的原理为代理,在这里可以表示由它来“代理”某些操作,译为“代理器”。

  1. ES6原生提供了Proxy构造函数,用来生成Proxy实例。
var proxy = new Proxy(target, handler);
  1. Proxy对象的所有用法,都是上面的这种形式。不同的只是handle参数的写法。其中:
    new Proxy 用来生成Proxy实例,
    target 是表示所要拦截的对象,
    handle 是用来定制拦截行为的对象。
  let person = {
    name: '豆豆豆豆豆',
    gender: '女',
    age: 18
  }

  //暴漏给用户操作的一个对象,把上边的person保护起来,以后操作的就是这个person
  let person = new Proxy(person, { //通过Proxy代理上边的person(原始数据)
    get(target, key) { //target指的是代理的数据也就是person, key也就是你要它的哪个属性
      return target[key]
    },
    set(target, key, value) {
      if(key !== 'gender'){ //数据保护 gender 不许修改
        target[key] = value
      }
    }
  })
  console.log(person.gender)
  //打印结果: 女

  try{
    person.gender = '男'
  } catch (e) {
    console.error(e)
  } finally {
    
  }
  //打印结果:报错gender不许修改

Proxy支持拦截的操作一共有13种,具体了解可看手册

这里在普及一下 Try...Catch 语句, 和 finally 子句

try...catch 可以测试代码中的错误。try 部分包含需要运行的代码,而 catch 部分包含错误发生时运行的代码。

  try {
    //在此运行代码
  } catch(err) {
    //在此处理错误
  } finally {
    //只要代码中包含finally子句,无论try或catch语句块中包含什么样的代码,都不会阻止finally子句的执行
  }
上一篇 下一篇

猜你喜欢

热点阅读