proxy的作用

文章介绍了JavaScript中的Proxy对象,如何利用它来创建代理以解决跨域问题。通过示例展示了Proxy在拦截读写操作、属性遍历和存在检查等方面的应用,并提到了Proxy.revocable()用于撤销代理的功能。
摘要由CSDN通过智能技术生成

一、proxy:1、代理 2、解决跨域问题

1.引入库

代码如下(示例):

  var house = { size: '120平', price: 1400000, info: '位置好,大平层,落地窗' }
    // new Proxy(target,handler)
    // target:  要拦截的对象
    // handler:要拦截对象的处理的行为。对象

    var housePro = new Proxy(house, {
        // target   目标对象
        // property   获取的元素
        // 获取  读操作
        get(target, property) {
            // console.log(target);
            // console.log(property);

            if (property == 'size') {
                return '120平,公摊小,送地下室,送天台,送对象'
            }
            if (property == 'info') {
                return '挨着学校,地铁,还有10几万平的大公园,还要一个大湖,南北通透,物业很好,上门服务,不要钱,国营企业有保证。'
            }
            return target[property]
        },
        // 设置  写操作
        set(target, property, value) {
            console.log(value);
            target[property] = value
        },

        // ownKeys拦截操作,拦截过滤Object.Keys()对象的属性遍历
        ownKeys() {
            return ['size', 'info']
        },
        // has( )拦截操作:拦截key in object的操作,结果会返回一个布尔值。
        has(target, property) {
            // console.log(target);
            // console.log(property);
            if (target[property] == undefined) {
                return false
            }
            return true
        }
    })

    console.log(housePro.size);
    console.log(housePro.info);
    console.log(housePro.price);
    housePro.price = 1500000
    console.log(housePro.price);
    console.log(Object.keys(housePro));

    console.log('size' in housePro);
    console.log('name' in housePro);
    // apply方法 除了对象类型的变量可以被代理,函数也可以被代理。
    let fn = function () {
        console.log(123);
    }
    let pro = new Proxy(fn, {
        apply() {
            console.log(456);
        }
    })
    pro()

    /*
    proxy.revocable方法
      如果创建了代理之后又想取消代理的话,我们可以用Proxy.revocable( )(可废止的,可撤回的;)
    函数来实现,它会返回一个对象,对象中含有一个proxy属性,它就是Proxy的代理实例对象;
    还有一个revoke属性,它是一个方法,用于取消代理。

    */

    let porAble = Proxy.revocable(house, {
        get(target, property) {
            return target[property]
        }
    })
    console.log(porAble);
    console.log(porAble.proxy.size);
    porAble.revoke()
    console.log(porAble.proxy.size);// 不能对已撤销的代理执行“get”操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值