美文网首页
ES6 Proxy的用法以及在实际中的应用

ES6 Proxy的用法以及在实际中的应用

作者: 铜牛彦祖 | 来源:发表于2018-06-09 19:59 被阅读0次

1. 拦截对象属性的读取

{
  // Proxy 代理
  let obj = {    //原始对象
    time:'2017-03-11',
    name:'net',
    _r:123
  };
  let monitor = new Proxy(obj,{
    //拦截对象属性的读取
    get(target,key) {
      return target[key].replace('2017','2018')
    }
  })
  console.log(monitor.time); // 2018-03-11
  console.log(obj.time);// 2017-03-11
}

2. 拦截对象设置属性

{
  // Proxy 代理
  let obj = {    //原始对象
    time:'2017-03-11',
    name:'net',
    _r:123
  };
  let monitor = new Proxy(obj,{
    //拦截对象设置属性
    set(target,key,value) {
      if(key==='name') {
        return target[key] = value
      } else {
        return target[key]
      }
    }
  })
  monitor.name = 'xiaowang'
  console.log(monitor.name);// xiaowang
  console.log(obj.name);// xiaowang
  monitor._r = 5555; 
  console.log(monitor._r);//123,没有设置成功
}

3. 拦截key in object操作

has(target,key){
  if(key==='name') {
    return target[key]
  }else {
    return false
  }
}
console.log('time' in monitor); //false

4. 拦截delete

deleteProperty(target,key){
  if(key.indexOf('_')>=-1) {
    delete target[key];
    return true;
  } else {
    return target[key]
  }
}
delete monitor.time
console.log(monitor.time); //2017-03-11.不满足条件 所以没有被删除

5.拦截Object.keys,Object.getOwnPropertySymbols,Object,getOwnPropertyNames

{
  ownKeys(target) {
    return Object.keys(target).filter(item=>item!='time')
  }
  console.log('ownKeys',Object.keys(monitor)); // ['name','_r'] time被保护起来了
}

相关文章

网友评论

      本文标题:ES6 Proxy的用法以及在实际中的应用

      本文链接:https://www.haomeiwen.com/subject/tccxeftx.html