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 相关文章推荐
jQuery live( type, fn ) 委派事件实现
Oct 11 Javascript
jquery DOM操作 基于命令改变页面
May 06 Javascript
6个DIV 135或246间隔一秒轮番显示效果
Jul 24 Javascript
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
基于jquery的监控数据是否发生改变
Apr 11 Javascript
谷歌浏览器调试JavaScript小技巧
Dec 29 Javascript
纯JavaScript实现的分页插件实例
Jul 14 Javascript
JS弹出窗口插件zDialog简单用法示例
Jun 12 Javascript
详解ECharts使用心得总结
Dec 06 Javascript
令按钮悬浮在(手机)页面底部的实现方法
May 02 Javascript
JavaScript实现数字前补“0”的五种方法示例
Jan 03 Javascript
浅谈监听单选框radio改变事件(和layui中单选按钮改变事件)
Sep 10 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模板引擎SMARTY
2006/10/09 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
基于PHP创建Cookie数组的详解
2013/07/03 PHP
用PHP代码在网页上生成图片
2015/07/01 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
javascript 客户端验证上传图片的大小(兼容IE和火狐)
2009/08/15 Javascript
jQuery的框架介绍
2016/05/11 Javascript
Javascript单例模式的介绍和实例
2016/10/08 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
整理关于Bootstrap列表组的慕课笔记
2017/03/29 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
angularJS实现不同视图同步刷新详解
2018/10/09 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
Vue简单实现原理详解
2020/05/07 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
Python实现子类调用父类的方法
2014/11/10 Python
儿童学习python的一些小技巧
2018/05/27 Python
python实现简单飞行棋
2020/02/06 Python
HTML5视频支持检测(检查浏览器是否支持视频播放)
2013/06/08 HTML / CSS
Veronica Beard官网:在酷、经典和别致之间找到了平衡
2018/01/11 全球购物
幼儿师范毕业生自荐信
2013/11/09 职场文书
学生处主任岗位职责
2013/12/01 职场文书
劳资人员岗位职责
2013/12/19 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2014办公室副主任四风对照检查材料思想汇报
2014/09/20 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
司法局群众路线教育实践活动整改措施思想汇报
2014/10/13 职场文书
刑事和解协议书范本
2014/11/19 职场文书
小学见习报告
2015/06/23 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL