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