{
function validation(target,validationExt){
return new Proxy(target,{
_validationExt:validationExt,
set(target,key,value){
// 验证是否存在key
if(target.hasOwnProperty(key)){
let va = this._validationExt[key];// 验证value是否符合规则
if (!!va(value)) {
// 设置被代理对象属性
return Reflect.set(target,key,value);
}else{
throw Error(`不能设置${key}到${value}`);
}
}else{
throw Error(`${key}不存在`);
}
},
});
}
// 验证规则
const validationExt = {
name(val){
return typeof val==='string'
},
age(val){
return typeof val === 'number' && val>18
},
}
class Person{
constructor(name,age){
this.name = name;
this.age = age;
return validation(this,validationExt);
}
}
let person1 = new Person('wuding',30);
console.log(person1);
// 下面赋值报错
// person1.name = 123;
// person1.age = 17;
// 下面赋值正常
person1.name = 'Han';
person1.age = 19;
console.log(person1);
}
网友评论