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 相关文章推荐
JSON 编辑器实现代码
Dec 06 Javascript
用JQUERY增删元素的代码
Feb 14 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
May 30 Javascript
关于js遍历表格的实例
Jul 10 Javascript
JS之Date对象和获取系统当前时间详解
Jan 13 Javascript
Jquery获取元素的父容器对象示例代码
Feb 10 Javascript
javascript消除window.close()的提示窗口
May 20 Javascript
JS 动态判断PC和手机浏览器实现代码
Sep 21 Javascript
Require.JS中的几种define定义方式示例
Jun 01 Javascript
浅析vue.js数组的变异方法
Jun 30 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
Nov 10 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
Apr 10 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
在WIN98下以apache模块方式安装php
2006/10/09 PHP
preg_match_all使用心得分享
2014/01/31 PHP
yii用户注册表单验证实例
2015/12/26 PHP
PHP合并数组的2种方法小结
2016/11/24 PHP
JS判断不能为空实例代码
2013/11/26 Javascript
JavaScript编程的10个实用小技巧
2014/04/18 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
js通过keyCode值判断单击键盘上某个键,然后触发指定的事件方法
2017/02/19 Javascript
JavaScript使用ul中li标签实现删除效果
2019/04/15 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
用原生JS实现爱奇艺首页导航栏代码实例
2019/09/19 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[01:55]2014DOTA2国际邀请赛 BBC正赛第一天总结
2014/07/10 DOTA
[43:41]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
复习Python中的字符串知识点
2015/04/14 Python
在Python中定义和使用抽象类的方法
2016/06/30 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
python实现泊松图像融合
2018/07/26 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
如何用Matplotlib 画三维图的示例代码
2020/07/28 Python
详解如何用canvas画一个微笑的表情
2019/03/14 HTML / CSS
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
编辑个人求职信范文
2013/09/21 职场文书
一份婚庆公司创业计划书
2014/01/11 职场文书
上班玩游戏检讨书
2014/02/07 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
小班评语大全
2014/05/04 职场文书
个人融资协议书
2014/10/02 职场文书
2014个人年度工作总结
2014/12/15 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
法定代表人资格证明书
2015/06/18 职场文书
golang switch语句的灵活写法介绍
2021/05/06 Golang
Go语言grpc和protobuf
2022/04/13 Golang
Golang并发工具Singleflight
2022/05/06 Golang