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 相关文章推荐
IE本地存储userdata的一个bug说明
Jul 01 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
Nov 17 Javascript
Jquery绑定事件(bind和live的区别介绍)
Aug 23 Javascript
基于jquery的9行js轻松实现tab控件示例
Oct 12 Javascript
基于jQuery的图片不完全按比例自动缩小
Jul 11 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
Sep 04 Javascript
浅谈重写window对象的方法
Dec 29 Javascript
jQuery滑动到底部加载下一页数据的实例代码
May 22 jQuery
关于使用axios的一些心得技巧分享
Jul 02 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
Jul 17 Javascript
js实现数字跳动到指定数字
Aug 25 Javascript
antd table按表格里的日期去排序操作
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 array_walk() 数组函数
2011/07/12 PHP
php获取本地图片文件并生成xml文件输出具体思路
2013/04/27 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
javascript window.confirm确认 取消对话框实现代码小结
2012/10/21 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
js给selected添加options的方法
2015/05/06 Javascript
ES7中利用Await减少回调嵌套的方法详解
2017/11/01 Javascript
VueRouter导航守卫用法详解
2017/12/25 Javascript
JS实现获取word文档内容并输出显示到html页面示例
2018/06/23 Javascript
在小程序开发中使用npm的方法
2018/10/17 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
vue data有值,但是页面{{}} 取不到值的解决
2020/11/09 Javascript
[48:23]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第一局
2016/03/05 DOTA
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
python实现爬取千万淘宝商品的方法
2015/06/30 Python
python实现发送邮件及附件功能
2021/03/02 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
2019/06/11 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
Python实现剪刀石头布小游戏(与电脑对战)
2019/12/31 Python
selenium+python实现基本自动化测试的示例代码
2021/01/27 Python
基于HTML5 Canvas 实现弹出框效果
2017/06/05 HTML / CSS
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
英文自荐信
2013/12/15 职场文书
新入职员工的自我介绍演讲稿
2014/01/02 职场文书
岗位职责的构建方法
2014/02/01 职场文书
请假条范文大全
2014/04/10 职场文书
IT工程师岗位职责
2014/07/04 职场文书
干部作风整顿自我剖析材料和整改措施
2014/09/18 职场文书
答谢酒会主持词
2015/07/02 职场文书
Springboot配置suffix指定mvc视图的后缀方法
2021/07/03 Java/Android
python中Matplotlib绘制直线的实例代码
2021/07/04 Python