es6 Proxy、Reflect的简易应用

{
    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);
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容