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 相关文章推荐
编写针对IE的JS代码两种编写方法
Jan 30 Javascript
使用GruntJS构建Web程序之构建篇
Jun 04 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
Jun 06 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
Dec 13 Javascript
vue2单元测试环境搭建
May 24 Javascript
详解vue移动端项目的适配(以mint-ui为例)
Aug 17 Javascript
react脚手架如何配置less和ant按需加载的方法步骤
Nov 28 Javascript
js实现图片无缝循环轮播
Oct 28 Javascript
Vue 实现分页与输入框关键字筛选功能
Jan 02 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 Javascript
vue 实现setInterval 创建和销毁实例
Jul 21 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
Jul 09 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
php读取csv实现csv文件下载功能
2013/12/18 PHP
PHP修改session_id示例代码
2014/01/08 PHP
php+ajax实现图片文件上传功能实例
2014/06/17 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
PHP实现的简单对称加密与解密方法实例小结
2017/08/28 PHP
使用jscript实现二进制读写脚本代码
2008/06/09 Javascript
基于jQuery的倒计时插件代码
2011/05/07 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
一个JavaScript处理textarea中的字符成每一行实例
2014/09/22 Javascript
JavaScript中的无阻塞加载性能优化方案
2014/10/10 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
Three.js实现绘制字体模型示例代码
2017/09/26 Javascript
微信小程序控制台提示warning:Now you can provide attr "wx:key" for a "wx:for" to improve performance解决方法
2019/02/21 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
2019/06/05 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
Python多进程同步Lock、Semaphore、Event实例
2014/11/21 Python
浅谈MySQL中的触发器
2015/05/05 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
幼师专业求职推荐信
2013/11/08 职场文书
合同专员岗位职责
2013/12/18 职场文书
查环查孕证明
2014/01/10 职场文书
师说教学反思
2014/02/07 职场文书
大三学习计划书范文
2014/05/02 职场文书
师德师风建设方案
2014/05/08 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
天坛导游词
2015/02/02 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书