ES5---Proxy的理解的使用
2024-09-06 09:41:49
定义: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 实例本身,其中最后一个参数可选。
最新文章
- 学习Nodejs之mysql
- 《More Effective C#》读书笔记
- 代码规范、GitHub提交源码的标准 答题人-杨宇杰
- iOS 蓝牙开发(四)BabyBluetooth蓝牙库介绍(转)
- Robots on a grid(DP+bfs())
- July 16th, Week 29th Saturday, 2016
- xftp的使用
- 【py网页】urllib模块,urlopen
- Database
- Android:调试之DDMS
- libyuv颜色空间转换开源库
- spring MVC 整合mongodb
- 错误: 找不到或无法加载主类 scala.tools.nsc.MainGenericRunner
- 基于visual Studio2013解决面试题之0802数字最多元素
- ecshop后台权限增加
- Wake-On-LAN待机或休眠模式中唤醒
- javascript实现的一个信息提示的小功能/
- 一个经典的js中关于块级作用域和声明提升的问题
- Swift学习(1)
- AppServ安装的一点小麻烦----
热门文章
- jmeter跨线程组获取cookie或jmeter线程组共享cookie-笔者亲测
- JS中字符串和数组的相互转化
- 四. sql上线平台
- Centos 下 Jenkins2.6 + Git + Maven Shell一件部署与备份
- 学习记录 | 文件收集-Php
- 数据分析05 /pandas的高级操作
- Python模块02/序列化/os模块/sys模块/haslib加密/collections
- 据说比Spring快44倍的web开发框架,不妨试试
- Android 对接硬件串口篇
- python- generator生成器