{
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);
}
es6 Proxy、Reflect的简易应用
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 写在前面:这篇文章讲述了如何利用Proxy和Reflect实现双向数据绑定,个人系Vue早期玩家,写这个小框架的时...
- Author: Zongwei Zhou | 周纵苇Weibo: @MrGiovanniEmail: zongwe...
- 原文收录在我的 GitHub博客 (https://github.com/jawil/blog) ,喜欢的可以关注...