Proxy

Proxy是指在目标对象上,架设一个拦截层,外界对象要访问对象都要先通过这个拦截层

1.get方法

        get用于读取某个属性的读取操作

        

let person = {

    name:'影久'

}

设置拦截

let proxy = new Proxy(person,{

    get(target,property,receiver){

        if(property in target){

            console.log(1)

            return target[property]

        }else {

            throw new Error('不存在'+property+'在'+target+'中')

        }

    }

})

proxy.name // 影久

proxy.age // '不存在age在person中'

2.set方法

        

    set(target,prop,value){

        if(prop === 'age'){

            if(!Number.isInteger(value)){

                throw new TypeError('the age is not an iterage')

            }else {

                console.log(true)

                target[prop] = value

            }

        }

    }

proxy.age = 5  //true

3.apply方法

拦截一个函数,当函数调用、apply、call的时候,就去调用

let fn = function () {return 'fn'}

let twice = {

    apply(target,ctx,value){

        console.log(target,ctx,value)

        return 'twice'

    }

}

let pro = new Proxy(fn,twice)

4.has方法

        

let handle = {

    has(target,key){

        if(key[0] === '_'){

            return false

        }

        return key in target

    }

}

let objj = {

    _pro:"foo",

    pro:2

}

let p = new Proxy(objj,handle)

    '_pro' in p

5.construct方法

当拦截了一个函数要new的时候,加以拦截

let p = new Proxy(function(){},{

    construct(target,args){

        console.log(args)

        return {value:args[0] * 10}

    }

})

console.log((new p(3)).value) 

还有类似的方法

        deleteProperty()

        defineProperty()

        getPropertyOf()

        等等

        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值