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 相关文章推荐
javascript 实用的文字链提示框效果
Jun 30 Javascript
javascript 回到顶部效果的实现代码
Feb 17 Javascript
jquery.form.js用法之清空form的方法
Mar 07 Javascript
JavaScript实现简单的数字倒计时
May 15 Javascript
jQuery实现百叶窗焦点图动画效果代码分享(附源码下载)
Mar 14 Javascript
jQuery组件easyui对话框实现代码
Aug 25 Javascript
利用策略模式与装饰模式扩展JavaScript表单验证功能
Feb 14 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
浅谈Vue.js 关于页面加载完成后执行一个方法的问题
Apr 01 Javascript
详解vue中移动端自适应方案
May 05 Javascript
JavaScript判断浏览器运行环境的详细方法
Jun 30 Javascript
vue中使用百度脑图kityminder-core二次开发的实现
Sep 26 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-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
PHP的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
yii分页组件用法实例分析
2015/12/28 PHP
php+jQuery+Ajax简单实现页面异步刷新
2016/08/08 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
详解php用static方法的原因
2018/09/12 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
解决PHP Opcache 缓存刷新、代码重载出现无法更新代码的问题
2020/08/24 PHP
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
node.js使用require()函数加载模块
2014/11/26 Javascript
js实现随屏幕滚动的带缓冲效果的右下角广告代码
2015/09/04 Javascript
Javascript 动态改变imput type属性
2016/11/01 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
详解Angular6学习笔记之主从组件
2018/09/05 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
vue2.x 通过后端接口代理,获取qq音乐api的数据示例
2019/10/30 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python单例模式实例分析
2015/01/14 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
Python中对象的引用与复制代码示例
2017/12/04 Python
Python对数据进行插值和下采样的方法
2018/07/03 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
树莓派实现移动拍照
2019/06/22 Python
pycharm运行scrapy过程图解
2019/11/22 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
pandas数据拼接的实现示例
2020/04/16 Python
Ben Sherman官方网站:英国男装品牌
2019/10/22 全球购物
运动会通讯稿100字
2014/01/31 职场文书
会计专业应届生自荐信
2014/02/07 职场文书
学习雷锋寄语大全
2014/04/11 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书