Proxy
是什么
proxy对象创建一个对象的代理,实现对象的的拦截和定义
怎么用
const p = new Proxy(【object】,【handler】)
object:是指被代理的对象
handler:是一个容纳一批特定属性的占位符对象。它包含有 Proxy
的各个捕获器(trap)。
const handler = { get: function(obj, prop) { return prop in obj ? obj[prop] : 37; } }; const p = new Proxy({}, handler); p.a = 1; p.b = undefined; console.log(p.a, p.b); // 1, undefined console.log('c' in p, p.c); // false, 37
Proxy 相比于 defineProperty 的优势
defineProperty
没办法监听数组的变化
必须遍历对象的每个属性
必须遍历深层嵌套的对象
Proxy
针对对象,不需要遍历
支持数组
拥有更多拦截方式(object上的许多方法都可以拦截,拦截获取prototype的函数object.getPrototypeOf(),判断属性Object.getOwnPropertyDescriptor())