proxy,Reflect

proxy,Reflect

//Proxy 代理对象 为对象设置访问代理器
//Object.defineProperty //只能监测读写

const person={
    name:'tom',
    age:20
}
const personProxy=new Proxy(person,//需要代理的目标对象
    {//代理的处理对象
        get(target,property){//监视对象的访问
            //1.代理的目标对象 2.外部访问的属性名
            return property in target ? target[property] : 'default'
        },
        set(target,property,value){//监视对象的设置
            //1.代理的对象 2.要改变 写入的属性名 3.写入的值

            //写入之前做校验 
            if(property==='age'){
                if(!Number.isInteger(value)){//确定传递的参数是否为整数
                    throw new TypeError(`${value} is not an int`)
                }
            }
            target[property]=value 

        },
        deleteProperty(target,property){
            delete target[property]
        }
        
    }
)

console.log(personProxy.age=10)

console.log(personProxy.name)

delete personProxy.age

console.log(person)

//支持数组对象的监测

const list=[]

const listProxy=new Proxy(list,{
    set(target,property,value){
        console.log('set',property,value)
        return target[property]=value
    }
})
listProxy.push(100)
listProxy.push(200)
console.log(list) //[100,200]

reflect属于一个静态类 封装了对对象的底层操作
统一了操作对象的api

const obj={
    foo:'123',
    bar:'456'
}
const proxy=new Proxy(obj,{
    //没有定义get方法 等同于定义了一个get方法 将参数交给reflect的get方法

get(target,property){
    return Reflect.get(target,property)
}
})

const obj={
    name:'foo',
    age:18
}
//target是否为object
Reflect.getPrototypeOf(obj) //Object.prototype

// 判断一个对象是否可扩展 (即是否能够添加新的属性)
Reflect.isExtensible(obj) //true
//方法阻止新属性添加到对象 
Reflect.preventExtensions(obj) //返回true 设置成功 
//判断是否存在某个属性
Reflect.has(obj,'name') //true

//获取对象中的所有属性
Reflect.ownKeys(obj) //['name’,‘age']

//为对象添加一个新的属性
Reflect.set(obj,'eye','block') //设置成功返回true

//获取对象的值
Reflect.get(obj,'name')//foo

//获取对象中的属性及属性描述
console.log(Reflect.getOwnPropertyDescriptor(obj,'name')) //{ value: 'foo', writable: true, enumerable: true, configurable: true }

//删除某个属性
Reflect.deleteProperty(obj,'age') 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值