ES6 proxy和reflect的使用方法与应用实例分析


Posted in Javascript onFebruary 15, 2020

本文实例讲述了ES6 proxy和reflect的使用方法。分享给大家供大家参考,具体如下:

proxy和reflect都是es6为了更好的操作对象而提供的新的API,接下来探讨一下二者的作用,联系。

设计proxy,reflect的作用:

proxy的作用:

Proxy的设计目的在于(修改编程语言),修改某些操作方法的默认行为,

等同于在语言层面作出修改,是元编程(meta programming)  例如修改set,get方法

reflect的作用:

1,映射一些明显属于对象语言内部的方法,目前是共存于Object和Reflect上,未来只在Reflect上

2,修改一些Object上的方法返回的结果,减少异常抛出,使其变得更加合理

3,让Object操作都变成函数行为(主要的作用)

4,Reflect对象的方法与Proxy对象的方法一一对应(主要的作用)

proxy和reflect的方法:

proxy的实例方法:

get() set() apply() has() cunstruct() deleteProperty() defineProperty()
getOwnPropertyDescriptor() getPrototypeOf() isExtensible() ownKeys(), preventExtensions() setPrototypeOf()  
var person = {
 name: "张三"
};
 
var proxy = new Proxy(person, {
 get: function(target, property) {
  if (property in target) {
   return target[property];
  } else {
   throw new ReferenceError("Property \"" + property + "\" does not exist.");
  }
 }
});

注:目标对象内部的this关键字会指向 Proxy 代理

自身方法:Proxy.revocable方法返回一个可取消的 Proxy 实例

reflect的静态方法:

和proxy相对应,reflect有13个静态方法,分别一一对应于proxy的实例方法

Reflect.apply(target, thisArg, args) Reflect.construct(target, args)
Reflect.get(target, name, receiver) Reflect.set(target, name, value, receiver)
Reflect.defineProperty(target, name, desc) Reflect.deleteProperty(target, name)
Reflect.has(target, name) Reflect.ownKeys(target)
Reflect.isExtensible(target) Reflect.preventExtensions(target)
Reflect.getOwnPropertyDescriptor(target, name) Reflect.getPrototypeOf(target)
Reflect.setPrototypeOf(target, prototype)  

proxy和reflect联系:proxy的实例方法和reflect的静态方法一一对应

实例:观察者模式的实现

const queuedObservers = new Set();
 
const observe = fn => queuedObservers.add(fn);//接收一个函数fn
const observable = obj => new Proxy(obj, {set});//接收一个对象obj,采用set函数拦截设置obj
 
function set(target, key, value, receiver) {
 const result = Reflect.set(target, key, value, receiver);
 queuedObservers.forEach(observer => observer());
 return result;
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》

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

Javascript 相关文章推荐
JQuery最佳实践之精妙的自定义事件
Aug 11 Javascript
ExtJS 入门
Oct 29 Javascript
解析Javascript小括号“()”的多义性
Dec 03 Javascript
JavaScript实现简单图片滚动附源码下载
Jun 17 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
Jan 29 Javascript
jQuery插件slider实现拖动滑块选取价格范围
Apr 30 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
Javascript实现页面滚动时导航智能定位
May 06 Javascript
深入理解JavaScript创建对象的多种方式以及优缺点
Jun 01 Javascript
bootstrap3-dialog-master模态框使用详解
Aug 22 Javascript
Vue实现微信支付功能遇到的坑
Jun 05 Javascript
解决js中的setInterval清空定时器不管用问题
Nov 17 Javascript
js表达式与运算符简单操作示例
Feb 15 #Javascript
ES6 class类链式继承,实例化及react super(props)原理详解
Feb 15 #Javascript
ES6 Iterator遍历器原理,应用场景及相关常用知识拓展详解
Feb 15 #Javascript
es6 super关键字的理解与应用实例分析
Feb 15 #Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 #Javascript
Vue父子传递实例讲解
Feb 14 #Javascript
Javascript操作select控件代码实例
Feb 14 #Javascript
You might like
php.ini 中文版
2006/10/28 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
微信小程序 简单教程实例详解
2017/01/13 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
使用RN Animated做一个“添加购物车”动画的方法
2018/09/12 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
手把手带你封装一个vue component第三方库
2019/02/14 Javascript
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
JavaScript canvas绘制折线图
2020/02/18 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
[01:56]2014DOTA2西雅图邀请赛 MVP外卡赛老队长精辟点评
2014/07/09 DOTA
[01:34]传奇从这开始 2016国际邀请赛中国区预选赛震撼开启
2016/06/26 DOTA
Python实现从百度API获取天气的方法
2015/03/11 Python
Python 专题五 列表基础知识(二维list排序、获取下标和处理txt文本实例)
2017/03/20 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
TF-IDF与余弦相似性的应用(二) 找出相似文章
2017/12/21 Python
python中多层嵌套列表的拆分方法
2018/07/02 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
2018/12/04 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
Tensorflow训练MNIST手写数字识别模型
2020/02/13 Python
python实现FTP循环上传文件
2020/03/20 Python
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
GUESS德国官网:美国牛仔服装品牌
2017/02/14 全球购物
Furla官网:意大利著名的皮革品牌
2019/08/06 全球购物
全球最大的瓷器、水晶和银器零售商:Replacements
2020/06/15 全球购物
公司成立感言
2014/01/11 职场文书
节能环保演讲稿
2014/08/28 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2015年中秋晚会主持词
2015/07/01 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL