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 相关文章推荐
Prototype ObjectRange对象学习
Jul 19 Javascript
javascript对talbe进行动态添加、删除、验证实现代码
Mar 29 Javascript
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
jQuery取得设置清空select选择的文本与值
Jul 08 Javascript
使用JavaScript 编写简单计算器
Nov 24 Javascript
jQuery链使用指南
Jan 20 Javascript
JavaScript观察者模式(经典)
Dec 09 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
May 19 Javascript
深入理解vue-loader如何使用
Jun 06 Javascript
如何使用jQuery操作Cookies方法解析
Sep 08 jQuery
详解vue-cli项目在IE浏览器打开报错解决方法
Dec 10 Vue.js
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
精通php的十大要点(上)
2009/02/04 PHP
具有时效性的php加密解密函数代码
2013/06/19 PHP
js Select下拉列表框进行多选、移除、交换内容的具体实现方法
2013/08/13 Javascript
Javascript脚本实现静态网页加密实例代码
2013/11/05 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
jQueryMobile之Helloworld与页面切换的方法
2015/02/04 Javascript
JavaScript数组常用方法
2015/03/02 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
20分钟成功编写bootstrap响应式页面 就这么简单
2016/05/12 Javascript
vue-router 中router-view不能渲染的解决方法
2017/05/23 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
js中console在一行内打印字符串和对象的方法
2019/09/10 Javascript
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
python计算一个序列的平均值的方法
2015/07/11 Python
Python中列表元素转为数字的方法分析
2016/06/14 Python
详解supervisor使用教程
2017/11/21 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
python多进程读图提取特征存npy
2019/05/21 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
简单了解为什么python函数后有多个括号
2019/12/19 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
在python中求分布函数相关的包实例
2020/04/15 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python多线程和多进程关系详解
2020/12/14 Python
Shopee印度尼西亚:东南亚与台湾市场最大电商平台
2018/06/17 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
暑假实习求职信范文
2013/09/22 职场文书
理货员的岗位职责
2013/11/23 职场文书
营业员实习自我鉴定
2013/12/07 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
2016年秋季运动会广播稿
2015/12/21 职场文书
服务行业标语口号
2015/12/26 职场文书
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android