定义:Proxy原意为“代理”,在这可以理解为代理/拦截器的意思。Proxy在一个目标对象前放置了一个拦截,凡是外界对该对象的访问,都必须通过这层拦截,所以Proxy可以对外界的访问进行过滤和改写。

基本用法:ES6提原生提供Proxy构造函数,target代表要拦截目标对象,handler也是一个对象,用来定制拦截行为,一般是get,set等操作

let  proxy = new Proxy(target, handler);

下面是 Proxy 支持的拦截操作一览,一共 13 种

 拦截操作方法的使用:

get(target,Propkey,proxy)方法:第一个参数为目标对象,第二个参数为目标对象上的属性,第三个参数是可选的,是proxy实例本身

get方法可以继承

let proto = new Proxy({}, {
get(target, propertyKey, receiver) {
console.log('GET ' + propertyKey);
return target[propertyKey];
}
}); let obj = Object.create(proto);
obj.foo // "GET foo"

通过proxy读取属性(get)和get的继承可以实现执行某个函数来达到链式操作

 var pipe = function (value) {
var funcStack = [];
var oproxy = new Proxy({} , {
get : function (pipeObject, fnName) {
if (fnName === 'get') {
return funcStack.reduce(function (val, fn) {
return fn(val);
},value);
}
funcStack.push(window[fnName]);
return oproxy;
}
});
return oproxy;
}
var double = n => n * 2;
var pow = n => n * n;
var reverseInt = n => n.toString().split("").reverse().join("") | 0;
let a = pipe(3).double.pow.reverseInt.get;
console.log(a)//

get方法的第三个参数一般都是指向proxy实例,proxy对象的getReceiver属性是由proxy对象提供的,所以receiver指向proxy对象。

const proxy = new Proxy({}, {
get: function(target, key, receiver) {
return receiver;
}
});
proxy.getReceiver === proxy // true

set方法用来拦截某个属性的赋值操作,可以接受四个参数,依次为目标对象、属性名、属性值和 Proxy 实例本身,其中最后一个参数可选。

最新文章

  1. 学习Nodejs之mysql
  2. 《More Effective C#》读书笔记
  3. 代码规范、GitHub提交源码的标准 答题人-杨宇杰
  4. iOS 蓝牙开发(四)BabyBluetooth蓝牙库介绍(转)
  5. Robots on a grid(DP+bfs())
  6. July 16th, Week 29th Saturday, 2016
  7. xftp的使用
  8. 【py网页】urllib模块,urlopen
  9. Database
  10. Android:调试之DDMS
  11. libyuv颜色空间转换开源库
  12. spring MVC 整合mongodb
  13. 错误: 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner
  14. 基于visual Studio2013解决面试题之0802数字最多元素
  15. ecshop后台权限增加
  16. Wake-On-LAN待机或休眠模式中唤醒
  17. javascript实现的一个信息提示的小功能/
  18. 一个经典的js中关于块级作用域和声明提升的问题
  19. Swift学习(1)
  20. AppServ安装的一点小麻烦----

热门文章

  1. jmeter跨线程组获取cookie或jmeter线程组共享cookie-笔者亲测
  2. JS中字符串和数组的相互转化
  3. 四. sql上线平台
  4. Centos 下 Jenkins2.6 + Git + Maven Shell一件部署与备份
  5. 学习记录 | 文件收集-Php
  6. 数据分析05 /pandas的高级操作
  7. Python模块02/序列化/os模块/sys模块/haslib加密/collections
  8. 据说比Spring快44倍的web开发框架,不妨试试
  9. Android 对接硬件串口篇
  10. python- generator生成器