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 相关文章推荐
js技巧--转义符"\"的妙用
Jan 09 Javascript
使用Grunt.js管理你项目的应用说明
Apr 24 Javascript
php 中序列化和json使用介绍
Jul 08 Javascript
jquery获取多个checkbox的值异步提交给php
Jul 07 Javascript
深入浅析JavaScript的API设计原则
Jun 14 Javascript
简单谈谈axios中的get,post方法
Jun 25 Javascript
原生JS封装animate运动框架的实例
Oct 12 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
js 获取json数组里面数组的长度实例
Oct 31 Javascript
解决linux下node.js全局模块找不到的问题
May 15 Javascript
微信小程序如何获取用户头像和昵称
Sep 23 Javascript
vue自定义组件实现双向绑定
Jan 13 Vue.js
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数据流应用的简单例子
2012/06/01 PHP
基于PHP读取csv文件内容的详解
2013/06/18 PHP
javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码
2009/11/28 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
完美解决js传递参数中加号和&号自动改变的方法
2016/10/11 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
2017/01/05 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
react-native动态切换tab组件的方法
2018/07/07 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
js实现GIF动图分解成多帧图片上传
2019/10/24 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
浅谈Vue使用Cascader级联选择器数据回显中的坑
2020/10/31 Javascript
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python实现的HTTP并发测试完整示例
2020/04/23 Python
Python使用wxPython实现计算器
2018/01/30 Python
python机器学习之贝叶斯分类
2018/03/26 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
Html5画布_动力节点Java学院整理
2017/07/13 HTML / CSS
Free People中国官网:波西米亚风格女装服饰
2016/08/30 全球购物
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
行政工作个人的自我评价
2014/02/13 职场文书
综合实践活动方案
2014/02/14 职场文书
大学运动会入场词
2014/02/22 职场文书
陈欧的广告词
2014/03/18 职场文书
小学生国庆演讲稿
2014/09/05 职场文书
行政文员实习自我鉴定范文
2014/09/14 职场文书
责任书范本大全
2015/05/11 职场文书
python利用pandas分析学生期末成绩实例代码
2021/07/09 Python