//Proxy,Reflect

 {
let obj={
time:'2018-06-25',
name:'net',
_r:123
};
let monitor = new Proxy(obj,{
//拦截对象属性的读取
get(target,key){
return target[key].replace('2018','2019')
},
//拦截对象设置属性
set(target,key,value){
if(key==='name'){
return target[key]=value;
}else{
return target[key];
}
},
//拦截key in object 操作
has(target,key){
if(key==='name'){
return target[key];
}else{
return false;
}
},
//拦截delete
deleteProperty(target,key){
if(key.indexOf('_')>-1){
delete target[key];
return true;
}else{
return target[key]
}
},
//拦截Object.keys,Object.getOwnPropertySymbols,Object.getOwnPropertyNames
ownKeys(target){
return Object.keys(target).filter(item=>item!='time')
}
});
console.log('get',monitor.time);
monitor.name='web';
console.log('set',monitor.name);
console.log('has','name' in monitor);
// delete monitor.time;
// console.log('delete',monitor);
// delete monitor._r;
// console.log('delete',monitor);
console.log('ownKeys',Object.keys(monitor));
}
{ let obj={
time:'2018-06-25',
name:'net',
_r:123
};
console.log('Reflect get',Reflect.get(obj,'time'))
console.log('Reflect set',Reflect.set(obj,'time','2019-06-05'))
console.log(obj);
console.log('has',Reflect.has(obj,'name'))
}
//例子 {
function validator(target,validator){ return new Proxy(target,{
_validator:validator,
set(target,key,value,proxy){
if(target.hasOwnProperty(key)){
let va=this._validator[key];
if(!!va(value)){
return Reflect.set(target,key,value,proxy)
}else{
throw Error(`不能设置${key}到${value}`)
}
}else{
throw Error(`${key} 不存在`)
}
}
})
}
const personValidators={
name(val){
return typeof val==='string'
},
age(val){
return typeof val==='number'&&val>18
}
}
class Person{
constructor(name,age){
this.age=age;
this.name=name;
return validator(this,personValidators)
}
}
const person = new Person('lilei',30);
console.info(person)
person.name="qqq qq";
console.info(person)
}

最新文章

  1. maven向本地仓库导入jar包(处理官网没有的jar包)
  2. 通过arcgis在PostgreSQL中创建企业级地理数据库
  3. POJ 1308&&HDU 1272 并查集判断图
  4. SQL Server 错误:15023(创建对于用户失败)
  5. linux上改变mysql数据文件的位置
  6. Canvas开发笔记(不断更新)
  7. thinkphp 整合 ucenter
  8. QiQi and Bonds
  9. angular请求传递不了数据
  10. lucene3.6.0 经典案例 入门教程
  11. 计算一个数组里的重复值并且删去(java)
  12. HTTP架构介绍(2) 缓存
  13. Jace 上新建 Station 配置 笔记
  14. 第28月第23天 lineFragmentPadding
  15. Testing - 软件测试知识梳理 - 相关词汇
  16. C++ code:数组初始化
  17. kubernetes(k8s) 的常用命令
  18. 通过python将xml文件转换成html文件
  19. linux config
  20. php fwrite写入文件bom头导致的乱码问题解决

热门文章

  1. 亿级用户百TB级数据的AIOps 技术实践之路
  2. MySQL 检索数据(SELECT)
  3. java BufferedReader 与 BufferedWriter
  4. Go并发控制--context的使用
  5. pyhanlp 两种依存句法分类器
  6. java注解的自定义和使用
  7. Avalon总线学习 ---Avalon Interface Specifications
  8. chrome flash
  9. influxDB硬件配置指南
  10. Docker+Nginx部署Angular