一.作用
Proxy(代理期)
用于修改某些操作的默认行为(语言本身的操作才具备默认值)
,因此属于一种“元编程”
,即对编程语言进行二次编程
。
二.原理
Proxy
可以理解成,在目标对象前架设一个“拦截层”
,外界对该对象的访问都必须先通过这层拦截。
因此提供了一种机制,可以对外界的访问进行过滤和改写
。
三.基础语法
① 基础结构
let proxy = new Proxy(target, handler);
target
:要拦截的目标对象
handler
:Object
,定义要拦截的行为
② 示例
let obj = {};
let objProxy = new Proxy(obj, {
get(target, prop, self) {
return 1;
}
});
console.log(objProxy.name); // 1
console.log(objProxy.age); // 2
四.支持的拦截操作
①get(target, prop, self)
作用:拦截对象属性的读取
②set(target, prop, value, receiver)
作用:拦截对象属性的设置
返回:Boolean
③has(target, prop)
作用:拦截in
返回:Boolean
④deleteProperty(target, prop)
作用:拦截delete
返回:Boolean
⑤ownKeys(target)
作用:拦截自有属性的遍历
返回:Array
⑥getownPropertyDescriptor(target, prop)
作用:拦截Object.getownPropertyDescriptor
返回:Object
,属性的描述对象
⑦defineProperty(target, prop, propDesc)
作用:拦截Object.defineProperty、Object.defineProperties
返回:Boolean
⑧setPrototypeOf(target, proto)
作用:拦截Object.setPrototypeOf
返回:Object
⑨getPrototypeOf(target)
作用:拦截Object.getPrototypeOf
返回:Object
⑩preventExtensions(target)
作用:拦截Object.preventExtensions
返回:Boolean
⑩①isExtensible(target)
作用:拦截Object.isExtensible
返回:Boolean
⑩②apply(target, obj, args)
作用:拦截call、apply