作者:手机用户2502916257 | 来源:互联网 | 2023-10-14 11:04
get()方法用于拦截某个属性的读取操作,如果没有该属性的时候会报一个undefined的,如果结果get处理会返回对应的错误信息varperson{name:张三
get()方法用于拦截某个属性的读取操作,如果没有该属性的时候会报一个undefined的,如果结果get处理会返回对应的错误信息
var person = {
name: " 张三 "
};
var proxy = new Proxy(person, {
get: function(target, property) {
if(property in target) {
return target[property];
} else {
throw new ReferenceError("Property \"" + property + "\" does not exist.");
}
}
});
proxy.name // " 张三 "
proxy.age // 抛出一个错误set() 方法用来拦截某个属性的赋值操作。
假定Person对象有一个age属性, 该属性应该是一个不大于 200 的整数, 那么可以使用Proxy保证age的属性值符合要求
let validator = {
set: function(obj, prop, value) {
if(prop === 'age') {
if(!Number.isInteger(value)) {
throw new TypeError('The age is not an integer');
}
if(value > 200) {
throw new RangeError('The age seems invalid');
}
}
// 对于 age 以外的属性,直接保存
obj[prop] = value;
}
};
let person = new Proxy({}, validator);
person.age = 100;
person.age // 100
person.age = 'young' // 报错
person.age = 300 // 报错