• 技术文章 >web前端 >前端问答

    es6中proxy的用法是什么

    长期闲置长期闲置2022-05-05 15:56:59原创143

    在es6中,proxy用于拦截在一个对象上的指定操作,可以对外界的访问进行过滤和改写;Proxy在目标对象之前架设一层“拦截”,外界对该对象的访问都必须通过这层拦截,语法为“new Proxy(target, handler);”。

    本教程操作环境:windows10系统、ECMAScript 6.0版、Dell G3电脑。

    es6中proxy的用法是什么

    Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。下面是官方文档对proxy的一个定义。

    let p = new Proxy(target, handler);

    target :需要使用Proxy包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。

    handler: 一个对象,其属性是当执行一个操作时定义代理的行为的函数(可以理解为某种触发器)。

    ES6中提出了一个新的特性,就是proxy,用来拦截在一个对象上的指定操作。这个功能非常的有用。举一个例子来说:

    var engineer = { name: 'Joe Sixpack', salary: 50 };
    var interceptor = {
     set: function (receiver, property, value) {
      console.log(property, 'is changed to', value);
      receiver[property] = value;
     }
    };
    engineer = Proxy(engineer, interceptor);

    engineer对象被代理Proxy构建的代理对象代替,传入Proxy的第二个参数是一个处理器函数,一个处理器函数有多种方法,如get、set等方法。这里的set方法能够拦截到那些在代理对象身上进行的所有的属性赋值操作。

    当我们执行下面赋值:

    engineer.salary = 60;

    会触发处理器,输出信息:

    salary is changed to 60

    每当代理对象被赋值,处理器函数就会调用,这样就可以用来调试某些问题。

    当然了,Proxy可不是仅仅为了调试而诞生的,如果你用过Sencha Touch 或者 AngularJS的话,就会发现这些框架都是类似数据模型绑定的功能。

    笔者曾在Sencha Touch中用过代理,代码如下:

    proxy:{//数据代理
    //       type:'localstorage',
    //       id:'bills',
        // limitParam:'limit',
        // pageParam:'page',
        //将用户代理改为sql,通过websql来解决localstorage的5MB存储上限的问题
        type:'sql',
        database:'myDB',
        table:'bill',
    },
    //filters:[{property:"kind",value:"无"}],//过滤属性
    listeners:{
        removerecords:function(){
          console.log("数据被删除");
        },
        addrecords:function(){
          console.log("数据被追加");
        },
        updaterecord:function(){
          console.log("数据被修改");
        },
    }

    可以看到,它采用的是一种监听setter和getter的办法,而在Angular中采用的则是脏检测。。当我们有了Proxy后,对于简单的数据模型绑定就可以简化这些特定的检测方式了。

    【相关推荐:javascript视频教程web前端

    以上就是es6中proxy的用法是什么的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:ES6
    上一篇:es6数组怎么求平均数 下一篇:es6怎么取数组前几个元素
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【腾讯云】年中优惠,「专享618元」优惠券!• es6中assign的用法是什么• Set是ES6的吗• es6的promise是什么意思• es6中generator的用法是什么• es6字符串怎么去掉最后一个字符
    1/1

    PHP中文网