es6中proxy的用法是什么

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

es6中proxy的用法是什么

本教程操作环境: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的用法是什么的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2931587.html

(0)
上一篇 2025年3月11日 20:11:37
下一篇 2025年3月11日 20:11:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • vscode es6语法报错

    vscode es6语法报错     用VS Code开发ES6语法的项目,Promise等关键字和语法不识别,报错。 解决方法: 在项目根目录下建两个文件: .eslintrc.js .eslintignore .eslintrc.js …

    2025年4月2日
    100
  • es6数据类型有哪几种

    es6数据类型有七种:1、Boolean(布尔型);2、Null(空类型);3、Undefined(未赋值类型);4、Number(数值类型);5、String(字符串类型);6、Symbol(独一无二类型);7、Object(对象类型)。…

    2025年4月1日
    100
  • es6中some的作用是什么

    在es6中,some的作用是检测数组中是否存在指定条件的元素;若存在指定的元素则返回的结果是true,若不存在指定的元素则返回的结果是false,语法为“array.some(回调函数),thisValue)”。 本文操作环境:window…

    2025年4月1日
    100
  • es6新增的声明方法有什么

    新增声明方法:1、let,用于声明变量,语法“let 变量名=值”;2、const,用于声明常量,语法“const 常量名=值”;3、class,用于声明类,语法“class 类名{…}”;4、import,用于声明静态加载的输…

    2025年4月1日
    100
  • es6中set类型是不是有序的

    es6中set类型是有序的。set类型是es6中新增的有序列表集合,其中包含了一些相互独立的非重复值;set的遍历顺序就是插入顺序,set保存的一个函数列表调用时,就是按照指定的顺序进行调用,因此set类型是有序的。 本文操作环境:wind…

    2025年4月1日
    100
  • es6的class有没有变量提升

    es6的class没有变量提升。在es5中class存在变量提升,可以先使用再定义类,而在es6中,不会把类的声明提升到头部,先使用在定义的话会产生报错,因此不能先使用再定义,es6的class也就没有变量提升。 本文操作环境:window…

    2025年4月1日
    100
  • ES6的保留字有哪些

    ES6的保留字:1、enum(始终保留);2、严格模式下的保留字是implements、package、public、interface、protected、static、let、private;3、模块代码中的保留字是await。 本文操…

    2025年4月1日
    100
  • 在ES6中详细解读let和闭包

    本篇文章主要介绍了深入理解es6中let和闭包,现在分享给大家,也给大家做个参考。 本文介绍了深入理解ES6中let和闭包,分享给大家,具体如下: 在开始本文之前我们先来看一段代码 for(var i=0;i显然这段代码输出10,并没有向我…

    编程技术 2025年3月31日
    100
  • ES6使用注意事项有哪些

    这次给大家带来ES6使用注意事项有哪些,下面就是实战案例,一起来看一下。 ES6出来已经有好几年了,同时很多新特性可以被巧妙地运用在项目中。我想要列下其中一些,希望它们对你有用。 如果你还知道其他一些小技巧,欢迎留言。我很高兴把它们补充进来…

    编程技术 2025年3月31日
    100
  • ES6 迭代器和 for.of循环(详细教程)

    这篇文章主要介绍了es6 迭代器(iterator)和 for.of循环使用方法学习总结,现在分享给大家,也给大家做个参考。 一、什么是迭代器? 生成器概念在Java,Python等语言中都是具备的,ES6也添加到了JavaScript中。…

    编程技术 2025年3月31日
    100

发表回复

登录后才能评论