ES6中Proxy代理用法实例浅析


Posted in Javascript onApril 06, 2017

本文实例讲述了ES6中Proxy代理用法。分享给大家供大家参考,具体如下:

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后,对于简单的数据模型绑定就可以简化这些特定的检测方式了。

我们还可以使用proxy来实现多继承。众所周知,JavaScript中每个对象只能有一个直接的上层原型,从而无法实现多继承:

var foo = {
  foo: function () {
    console.log("foo")
  }
};
var bar = {
  bar: function () {
    console.log("bar")
  }
};
var sonOfFoo = Object.create(foo);
sonOfFoo.foo();   //"foo"
var sonOfBar = Object.create(bar);
sonOfBar.bar();   //"bar"
//怎么才能既有foo方法又有bar方法?

我们可以通过proxy中的get处理器来生成一个继承两个原型的代理对象:

sonOfFooBar = new Proxy({}, {
  get: function (target, name) {
    return target[name] || foo[name] || bar[name];
  }
})
sonOfFooBar.foo();  //"foo",有foo方法,继承自对象foo
sonOfFooBar.bar();  //"bar",也有bar方法,继承自对象bar

其还有很多应用场景,可以参考下面这篇文章:proxy

但是百度EFE团队给出的评价是该功能不能通过模拟实现,所以建议不要使用。所以还是值得观望一段时间的。

希望本文所述对大家ECMAScript程序设计有所帮助。

Javascript 相关文章推荐
使一个函数作为另外一个函数的参数来运行的javascript代码
Aug 13 Javascript
跨域请求之jQuery的ajax jsonp的使用解惑
Oct 09 Javascript
jQuery javaScript捕获回车事件(示例代码)
Nov 07 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
Nov 12 Javascript
Jquery使用css方法改变样式实例
May 18 Javascript
VueJs与ReactJS和AngularJS的异同点
Dec 12 Javascript
AngularJS指令与控制器之间的交互功能示例
Dec 14 Javascript
requirejs + vue 项目搭建详解
Jun 16 Javascript
js实现文字头像的生成代码
Mar 07 Javascript
js实现带积分弹球小游戏
Jul 21 Javascript
简介JavaScript错误处理机制
Aug 04 Javascript
JavaScript中isPrototypeOf函数
Nov 07 Javascript
ES6中Symbol类型用法实例详解
Apr 06 #Javascript
vue中mint-ui环境搭建详细介绍
Apr 06 #Javascript
B/S(Web)实时通讯解决方案分享
Apr 06 #Javascript
HTML中使背景图片自适应浏览器大小实例详解
Apr 06 #Javascript
ES6中的箭头函数实例详解
Apr 06 #Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
Apr 06 #Javascript
详谈js遍历集合(Array,Map,Set)
Apr 06 #Javascript
You might like
如何用javascript控制上传文件的大小
2006/10/26 Javascript
js 调整select 位置的函数
2008/02/21 Javascript
jquery常用操作小结
2014/07/21 Javascript
JavaScript模块化开发之SeaJS
2015/12/13 Javascript
分享我对JS插件开发的一些感想和心得
2016/02/04 Javascript
JS实现设置ff与ie元素绝对位置的方法
2016/03/08 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
Node.js数据库操作之查询MySQL数据库(二)
2017/03/04 Javascript
认识less和webstrom的less配置方法
2017/08/02 Javascript
JS实现DOM删除节点操作示例
2018/04/04 Javascript
React 组件间的通信示例
2018/06/14 Javascript
JS获取当前时间的实例代码(昨天、今天、明天)
2018/11/13 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
Python 从列表中取值和取索引的方法
2018/12/25 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
python Django 反向访问器的外键冲突解决
2020/05/20 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
海外淘书首选:AbeBooks
2017/07/31 全球购物
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
教师演讲稿范文
2014/01/08 职场文书
顶岗实习接收函
2014/01/09 职场文书
奶茶店创业计划书
2014/08/14 职场文书
公司离职证明样本
2014/09/13 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
乡村教师党员四风问题对照检查材料思想汇报
2014/10/08 职场文书
个人批评与自我批评
2014/10/15 职场文书
预备党员2014年第四季度思想汇报范文
2014/10/25 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
Vue中foreach数组与js中遍历数组的写法说明
2021/06/05 Vue.js