赞
踩
//首先定义对象 let data = { name: "mt", age: 8, price: 9000 } // let proxy = new Proxy(target, handler); // target 是用Proxy包装的被代理对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理) // handler 是一个对象,其声明了代理target 的一些操作,其属性是当执行一个操作时定义代理的行为的函数。 let proxyData = new Proxy(data,{ // 方法用来处理获取数据时的劫持行为 get(target,key){ if(key == "price"){ return target[key]*.9; } return target[key]; }, // 方法用来处理设置数据时的劫持行为 set(target,key,newVal){ target[key] = newVal; }, }); console.log(proxyData);
let proxy = new Proxy(target, handler);
get 方法用来处理获取数据时的劫持行为
set 方法用来处理设置数据时的劫持行为
has 方法用来处理在判断是否有该属性时的劫持行为
return true 存在该属性,false 不存在该属性
apply 方法用来代理函数的执行,要求 target 必须是一个函数
construct 方法用于拦截 new 操作符.
defineProperty 方法用于拦截 defineProperty 操作
return Object.defineProperty
deleteProperty 用于拦截对象属性的删除操作
getOwnPropertyDescriptor 方法用于拦截 getOwnPropertyDescriptor 操作
getOwnPropertyDescriptor 必须返回一个 object 或 undefined
getPrototypeOf 用于拦截对象调用 getPrototypeOf 方法
setPrototypeOf 方法主要用来拦截 Object.setPrototypeOf().
isExtensible 用于拦截对象的isExtensible方法
- Object.preventExtensions(obj) 阻止对象扩展
- Object.freeze(obj) 冻结对象
- Object.isExtensible() 判断对象是否可以扩展
preventExtensions 用于拦截 Object.preventExtensions
ownKeys 会拦截一下操作:
Object.keys()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。