ES6的Proxy
最近在Javascript的设计编程中,用到的那个单例模式,感觉就类似一种代理的思想【其实就是缓存的一种机制】,单例模式就是:
function getSingle(fn){
var result;
return function(){
return result || (result = fn.apply(this,arguments));
}
}
任何在getSingle传入方法的函数,都会具有单例模式,就类似于缓存的思想,函数的执行得先过getSingle,它里面有个result的缓存,有缓存返回缓存,但是跟ES6的Proxy还是有点区别。
var proxy = new Proxy(target, handler);
target是代理的对象,handler是参数,也是一个对象,定制拦截行为。
var proxy = new Proxy({}, {
get: function(target, property) {
return 35;
}
}); let obj = Object.create(proxy);
obj.time //
看这段代码:obj直接原型继承了代理对象proxy,那么访问obj的属性时,如果自身没有属性,就会访问原型链。
Proxy代理的用处很多,方法get,set,apply,has,construct等方法,多看些大神的用法,后面慢慢孰能生巧吧,知道这个东西是干嘛的,以后怎么用还得实际项目或者练习中进行巩固啦。
这里介绍几种代理(Proxy)方式:
虚拟代理把一些开销很大的对象,延迟到真正需要它的时候才去创建。比如说:ajax请求,如果用户请求次数过多,当接收到用户的请求时候,客户端先自己缓存进入代理对象,代理来决定是否真正进行ajax请求。这个就是虚拟代理。
保护代理是控制不同权限的对象对目标对象的访问。
代理的作用:
本体不愿意做的事情,可以交给代理去做,保证本体对象的功能的纯净和低耦合性。
代理和本体接口的一致性,保证了用户可以放心去请求代理,因为用户只关心能否得到想要的结果,任何请求本体的地方都可以去替换成代理完成。
还有一种缓存代理,就是写个代理方法,里面有个cache保存之前请求的数据,其实实际项目中经常有这样的需求,也是一种优化,缓存代理能够减少http请求次数,其实虚拟代理也是能够减少http请求的一种方式【做积累】,请求是个异步的操作,如何将请求结果放入代理对象的缓存中,具体实践项目中自己去研讨。
【完】
ES6的Proxy的更多相关文章
- 详解es6中Proxy代理对象的作用
在es6中新添加了Proxy,那么它有什么作用啊?Proxy本意为代理,而es6中的Proxy也就是代理对象,那么代理对象感觉听起来很模糊,在这里就解释一下Proxy代理对象的作用. Proxy的主要 ...
- [每日一题]面试官问:谈谈你对ES6的proxy的理解?
[每日一题]面试官问:谈谈你对ES6的proxy的理解? 关注「松宝写代码」,精选好文,每日一题 作者:saucxs | songEagle 一.前言 2020.12.23 日刚立的 flag,每日一 ...
- 深度揭秘ES6代理Proxy
最近在博客上看到关于ES6代理的文章都是一些关于如何使用Proxy的例子,很少有说明Proxy原理的文章,要知道只有真正掌握了一项技术的原理,才能够写出精妙绝伦的代码,所以我觉得有必要写一篇关于深刻揭 ...
- ES6之Proxy及Proxy内置方法
Proxy是ES6提供的代理器可以起到拦截作用,写法形式如 var proxy = new Proxy(target,handler);参数target表示要拦截的目标对象,handler是用来定制拦 ...
- es6之Proxy,Reflect
Proxy 可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写. var proxy = new Proxy(ta ...
- ES6之Proxy 的巧用
摘要: Proxy的骚操作. 作者:前端小智 原文:Proxy 的巧用 Fundebug经授权转载,版权归原作者所有. Proxy 介绍 使用Proxy,你可以将一只猫伪装成一只老虎.下面大约有6个例 ...
- ES6 之 Proxy
概述 Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改. Proxy 可以理解在目标对象架设一个“拦截”层外界对该对象的访问都必须先通过这层拦截,因此提供了一种机制可以对外界的访问进行 ...
- ES6的Proxy和Reflect
Proxy 有一个原始的数据对象,通过代理出来一个新的对象,用户操作的是这个新的对象 { let obj ={ time:'2018-01-01', name:'lx' , _r:123 } let ...
- es6(11)--Proxy,Reflect
//Proxy,Reflect { let obj={ time:'2018-06-25', name:'net', _r:123 }; let monitor = new Proxy(obj,{ / ...
随机推荐
- JAVA单例模式的几种写法
/** * 单例模式懒汉式(双重检锁线程安全.JDK1.5之后) */ public class Singleton { private static volatile Singleton singl ...
- Warning: $HADOOP_HOME is deprecated. hadoop解决方法补充版
下面的解决方案我亲自试了没有问题:可行,但是对于初学者来说肯定会有一个疑问:这个.bash_profile文件到底在哪呢:其实很简单: 当前用户的.bash_profile在/home/用户/下,系统 ...
- Linux上部署Tomcat+Nginx负载均衡
前提:配置好了JDK. 我这里是vm上的linux虚拟机,可能不适用于所有情况. 一.Linux上配置Tomcat 1.下载地址:https://tomcat.apache.org/download- ...
- 多方论战!市场到底看重VR哪些特质
VR即Virtual Reality的缩写,中文译为"虚拟现实".近年来,VR的概念不断升温,三星.谷歌.微软.索尼.HTC等互联网巨头纷纷杀入VR市场,甚至催生出许多商业神话. ...
- 这些科学家用DNA做的鲜为人知事,你估计都没见过!
DNA世界的每一步都给人类带来奇妙甚至吃惊的发现.研究人员越来越多地探索和掌握了生命中的分子.生物与技术之间的界限以前所未有的方式模糊,有时甚至更糟.但DNA也为复杂疾病带来简单的答案,存储奇怪的文件 ...
- OSX编译安装Python3及虚拟开发环境Virtualenv
0X00.前言 因为工作原因,最近主要做Python开发,刚好电脑系统重装之后所有的东西都需要重新配置.此文主要记录OSX下通过源码编译安装Python3以及安装虚拟开发环境Virtualenv. 0 ...
- 添砖加瓦:Linux系统监测
前言 前段时间因为项目需求,需要实时获取系统当前的运行状态,遂查阅了不少资料,基于/proc目录下的部分文件,实现了系统CPU.内存.网络和磁盘的实时监测. 一.CPU使用情况获取 获取CPU使用情况 ...
- 腾讯入股Snap,能救“阅后即焚”的命吗?
互联网社交的强大包容性,让各种社交形式都能有着较多的受众群体.普适性极广的QQ.微信."脸谱":专攻陌生人社交的陌陌:让人们发布意见的微博--当然也少不了"阅 ...
- 杂记:VMware中为mac虚拟机扩容
之前在VMware中安装Mac虚拟机时,硬盘选的是默认的40G,后来用的过程中随着软件的安装,特别是安装完Xcode和QT5.9之后,可用空间只剩不到3G,每次开机之后都会提醒空间不足,需要清理空间, ...
- memcached单点登录配置
域名 www.lxy.comblog.lxy.comnews.lxy.comshop.lxy.com php配置 session.save_handler = memcache session写mem ...