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 单引号和双引号的区别及使用注意
Jul 31 Javascript
用Js实现的动态增加表格示例自己写的
Oct 21 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
Oct 09 Javascript
Hammer.js+轮播原理实现简洁的滑屏功能
Feb 02 Javascript
angularjs封装bootstrap时间插件datetimepicker
Jun 20 Javascript
JS仿hao123导航页面图片轮播效果
Sep 01 Javascript
使用ef6创建oracle数据库的实体模型遇到的问题及解决方案
Nov 09 Javascript
angular4 JavaScript内存溢出问题
Mar 06 Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 Javascript
layui 关闭open弹出框 刷新table表格页面的方法
Sep 16 Javascript
webpack3.0升级4.0的方法步骤
Apr 02 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
Apr 08 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学习之php4与php5之间会穿梭一点点感悟
2007/05/03 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
php中smarty变量修饰用法实例分析
2015/06/11 PHP
yii2整合百度编辑器umeditor及umeditor图片上传问题的解决办法
2016/04/20 PHP
PHP实现 APP端微信支付功能
2018/06/22 PHP
判断页面是关闭还是刷新的js代码
2007/01/28 Javascript
nodejs入门详解(多篇文章结合)
2012/03/07 NodeJs
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
利用CSS、JavaScript及Ajax实现高效的图片预加载
2013/10/16 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery插件Tmpl的简单使用方法
2015/04/27 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
浅谈js的异步执行
2016/10/18 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
three.js实现3D视野缩放效果
2017/11/16 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
判断网页编码的方法python版
2016/08/12 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
详谈python3中用for循环删除列表中元素的坑
2018/04/19 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
logging level级别介绍
2020/02/21 Python
在Matplotlib图中插入LaTex公式实例
2020/04/17 Python
CSS3圆角和渐变2种常用功能详解
2016/01/06 HTML / CSS
html5图片上传预览示例分享
2014/04/14 HTML / CSS
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
自荐信的两点禁忌
2013/10/30 职场文书
主管会计岗位责任制
2014/02/10 职场文书
离婚上诉状范文
2015/05/23 职场文书
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python
Spring中bean集合注入的方法详解
2022/07/07 Java/Android