ES6中Proxy与Reflect实现重载(overload)的方法


Posted in Javascript onMarch 30, 2017

本文实例讲述了ES6中Proxy与Reflect实现重载(overload)的方法。分享给大家供大家参考,具体如下:

Proxy与Reflect实现重载(overload)

从语法角度讲JavaScript不支持重载。原因很简单,JS中函数可以传入任意类型、任意个数的参数,通通可以通过在函数内使用this.arguments获得。这样,就无法实现同名函数参数列表不同实现不同功能。当然,在实际使用过程中,可以人为去检测传入实参的个数及类型,来进行不同操作。但是,我认为这不能叫做重载。

ES6带来了Proxy和Reflect,配合使用可以实现重载。Proxy用于修改某些操作的默认行为,相当于对原始想进行的操作进行“包装”;Reflect对象的方法与Proxy对象的方法一一对应,这使得Proxy对象可以方便的调用对应的Reflect方法完成默认行为。我们可以这样使用它们:

function LogMessage( m ){
  this.m = m;
}
var message = new LogMessage( 1 );
var overload = new Proxy(message , {
  get: function(target, key, receiver){
    console.log(`getting ${key}`);
    return Reflect.get(target , key , receiver);
  },
  set: function(target, key, value, receiver){
    console.log(`setting ${key}`);
    return Reflect.set(target, key, value, receiver);
  }
});
overload.m = 2; //setting m
var s = overload.m; //getting m

看到了没,是不是很有意思,新创建的Proxy对象overload可以完成目标对象message的操作,同时,可以通过在默认操作之前自定义一些其他操作。我认为,这更像Java里的重载。

那么Proxy与Reflect有哪些实例方法呢?

1.get()
用于拦截某个属性的读取操作。

2.set()
用于拦截某个属性的赋值操作。

3.has()
可以隐藏某些属性,不被in操作符遍历到。

4.construct()
用于拦截new命令。

5.deleteProperty()
用于拦截delete操作。

6.defineProperty()
用于拦截Object.defineProperty操作。

7.enumerate()
用于拦截for...in循环。

8.getOwnPropertyDescriptor()
用于拦截Object.getOwnPropertyDescriptor操作。

9.isExtensible()
用于拦截Object.isExtensible操作。

10.preventExtensions()
用于拦截Object.preventExtensions操作。

11.setPrototypeOf()
用于拦截Object.setPrototypeOf操作。

上面很多方法不是很常用,如果感兴趣可以去查查相关资料

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

Javascript 相关文章推荐
setInterval,setTimeout与jquery混用的问题
Apr 08 Javascript
JS案例分享之金额小写转大写
May 15 Javascript
JQuery中使用on方法绑定hover事件实例
Dec 09 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
jquery实现炫酷的叠加层自动切换特效
Feb 01 Javascript
jQuery实现的类似淘宝网站搜索框样式代码分享
Aug 24 Javascript
jquery计算出left和top,让一个div水平垂直居中的简单实例
Jul 13 Javascript
js实现动态改变radio状态的方法
Feb 28 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
vue-devtools的安装步骤
Apr 23 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
打通前后端构建一个Vue+Express的开发环境
Jul 17 Javascript
vue分类筛选filter方法简单实例
Mar 30 #Javascript
教你快速搭建Node.Js服务器的方法教程
Mar 30 #Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
Mar 30 #Javascript
canvas绘制一个常用的emoji表情
Mar 30 #Javascript
JavaScript装饰器函数(Decorator)实例详解
Mar 30 #Javascript
Angular.JS去掉访问路径URL中的#号详解
Mar 30 #Javascript
详解Angular.js数据绑定时自动转义html标签及内容
Mar 30 #Javascript
You might like
Array of country list in PHP with Zend Framework
2011/10/17 PHP
php获取从html表单传递数组的方法
2015/03/20 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
2016/01/07 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
使用YII2框架实现微信公众号中表单提交功能
2017/09/04 PHP
容易被忽略的JS脚本特性
2011/09/13 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
浅谈javascript原型链与继承
2015/07/13 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
2016/06/07 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
2017/04/12 Javascript
ztree实现权限横向显示功能
2017/05/20 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
javascript使用正则实现去掉字符串前面的所有0
2018/07/23 Javascript
vue-cli 脚手架基于Nightwatch的端到端测试环境的过程
2018/09/30 Javascript
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
Python查找相似单词的方法
2015/03/05 Python
python实现多人聊天室
2020/03/31 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
python 实现任务管理清单案例
2020/04/25 Python
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
乌克兰香水和化妆品网站:Notino.ua
2018/03/26 全球购物
SQL Server笔试题
2012/01/10 面试题
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
大学生怎样进行自我评价
2013/12/07 职场文书
教师职称自我鉴定
2014/02/12 职场文书
打架检讨书范文
2015/01/27 职场文书
供应商食品安全承诺书
2015/04/29 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
教你使用pyinstaller打包Python教程
2021/05/27 Python
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA