Proxy就是对指定的对象的相关操作进行拦截,然后通过get和set进行后续处理。
参数:
const p = new Proxy(target, handler)
target :
要使用 Proxy 包装的目标对象(可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。
handler :
一个通常以函数作为属性的对象,各属性中的函数分别定义了在执行各种操作时,代理 p 的行为。
//声明一个名为obj的对象
var obj = {
name: "ZHouMao",
age: 18
}
//示例化一个代理p,代理的对象是obj
var p = new Proxy(obj, {
//get 属性读取时的操作
get(target, prop) {
//target 就是 obj 这个对象
//prop 是 obj 的属性名
if (prop in target) {
//如果该属性名存在与该对象中,则返回该属性值
return target[prop];
} else {
//否则返回字符串 "该对象没有该属性"
return "该对象没有该属性";
}
},
//set 属性设置时的操作
set(target, prop, value) {
//target 就是 obj 这个对象
//prop 是 obj 的属性名
//value 是 要设置的值
if (prop === "age") {
//如果该属性名是age,则返回修改后的值
target[prop] = value;
} else {
//否则弹出异常内容
throw "除年龄外,其它属性不可以更改";
}
}
})