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之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
javascript 快速排序函数代码
May 30 Javascript
JS远程获取网页源代码实例
Sep 05 Javascript
通过JQuery将DIV的滚动条滚动到指定的位置方便自动定位
May 05 Javascript
jQuery插件EasyUI校验规则 validatebox验证框
Nov 29 Javascript
jQuery绑定事件on()与弹窗的简要概述
Apr 27 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
解决vue+webpack打包路径的问题
Mar 06 Javascript
ES6如何用一句代码实现函数的柯里化
Jan 18 Javascript
swiper自定义分页器的样式
Sep 14 Javascript
如何编写一个 Webpack Loader的实现
Oct 18 Javascript
vue+element实现动态加载表单
Dec 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
php中simplexml_load_string使用实例分享
2014/02/13 PHP
C#使用PHP服务端的Web Service通信实例
2014/04/08 PHP
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
Linux系统下PHP-FPM的安装和配置教程
2015/08/17 PHP
js loading加载效果实现代码
2009/11/24 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
Javascript 实现复制(Copy)动作方法大全
2014/06/20 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
基于jquery实现下拉框美化特效
2016/02/02 Javascript
javascript实现滚动效果的数字时钟实例
2016/07/21 Javascript
jquery.validate表单验证插件使用方法解析
2016/11/07 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
JS实现闭包中的沙箱模式示例
2017/09/07 Javascript
vue2.0 自定义组件的方法(vue组件的封装)
2018/06/05 Javascript
vue实现购物车的小练习
2020/12/21 Vue.js
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
python tkinter界面居中显示的方法
2018/10/11 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
Python实现打印实心和空心菱形
2019/11/23 Python
Python之字符串的遍历的4种方式
2020/12/08 Python
CSS3改变浏览器滚动条样式
2019/01/04 HTML / CSS
预订从美国飞往印度的机票:MyTicketsToIndia
2017/05/19 全球购物
公司总经理岗位职责
2014/03/15 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
2014年五四青年节演讲比赛方案
2014/04/22 职场文书
计算机多媒体专业自荐信
2014/07/04 职场文书
通信工程求职信
2014/07/16 职场文书
检讨书范文500字
2015/01/28 职场文书
新员工试用期自我评价
2015/03/10 职场文书
家长会主持词开场白
2015/05/29 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
财务管理制度范本
2015/08/04 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书