es6 Proxy和Reflect(十一)

本文通过实例演示了JavaScript中Proxy对象的应用,包括属性读取、设置、删除等操作的拦截,以及Reflect对象的相关使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Proxy:代理

{
    let obj = {//供应商对象
        time:'2017-2-1',
        name:'net',
        _r:123
    };
    let monitor = new Proxy(obj,{//obj:要代理的供应商对象
        //拦截对象属性的读取
        get(target,key){
            return target[key].replace('2017','2018')
        },
        //拦截对象设置属性
        set(target,key,value){//target:obj
            if(key === 'name'){//只能修改name属性
                return target[key] = value;
            }else{
                return target[key];
            }
        },
        //拦截key in object操作
        has(target,key){
            if(key === 'name'){//只暴露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');//filter过滤函数
        }
    });
    console.log('get',monitor.time)//obj对用户是不可见的,用户读取的是obj通过Proxy的映射

    monitor.time = '2019';
    monitor.name = '慕课网';
    console.log('set',monitor.time,monitor.name);

    console.log('has','name' in monitor,'item' in monitor);

    delete monitor.time;
    console.log('delete',monitor);

    delete monitor._r;
    console.log('delete',monitor);

    console.log('ownKeys',Object.keys(monitor));//只返回了name,_r,time被保护起来
}

Reflect:反射


两者对象的方法是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值