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 相关文章推荐
从Ajax到JQuery Ajax学习
Feb 14 Javascript
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
Nov 24 Javascript
javascript转换静态图片,增加粒子动画效果
May 28 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
Jan 29 Javascript
JavaScript学习笔记之ES6数组方法
Mar 25 Javascript
bootstrap modal弹出框的垂直居中
Dec 14 Javascript
微信小程序多张图片上传功能
Jun 07 Javascript
浅谈对Angular中的生命周期钩子的理解
Jul 31 Javascript
angular4应用中输入的最小值和最大值的方法
May 17 Javascript
详解关闭令人抓狂的ESlint 语法检测配置方法
Oct 28 Javascript
JavaScript switch语句使用方法简介
Dec 30 Javascript
js实现tab栏切换效果
Aug 02 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
印尼林东PWN黄金曼特宁咖啡豆:怎么冲世界上最醇厚的咖啡冲煮教程
2021/03/03 冲泡冲煮
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
ucenter通信原理分析
2015/01/09 PHP
php session_decode函数用法讲解
2019/05/26 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
javascript json2 使用方法
2010/03/16 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
在ASP.NET中使用JavaScript脚本的方法
2013/11/12 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
DOM操作一些常用的属性汇总
2015/03/13 Javascript
JavaScript 继承详解(六)
2016/10/11 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
layui表格实现代码
2017/05/20 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
js module大战
2019/04/19 Javascript
js 对象使用的小技巧实例分析
2019/11/08 Javascript
Python去除列表中重复元素的方法
2015/03/20 Python
在Python中使用HTML模版的教程
2015/04/29 Python
Python中常见的数据类型小结
2015/08/29 Python
Python 错误和异常代码详解
2018/01/29 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
mac下如何将python2.7改为python3
2018/07/13 Python
HTML5和CSS3实例教程总结(推荐)
2016/07/18 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
赫里福德的一家乡村零售商店:Philip Morris & Son
2017/06/25 全球购物
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
采购人员的个人自我评价
2014/01/16 职场文书
美化环境标语
2014/06/20 职场文书
大学生活动总结模板
2014/07/02 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
python基础之模块的导入
2021/10/24 Python