let proxy = new Proxy(target, handler);target表示所要拦截的目标对象,handler参数也是一个对象,用来定制拦截行为。当不设置拦截时,访问proxy和target是一样的:
let target = {};
let proxy = new Proxy(target, {});
target.name = '张三';
console.log(proxy.name); //张三接下来,我们添加拦截看下效果:
let target = {name: '张三', age: 30};
let proxy = new Proxy(target, {
get:function(target, propKey) {
if(propKey in target){
if(propKey == 'name'){
return `hello, ${target[propKey]}`;
}else if(propKey == 'age'){
return `${target[propKey]} years old.`;
}
}else{
throw `Prop name ${propKey} does not exist.`
}
},
set:function(target, propKey, value){
if(propKey in target){
if(propKey == 'age'){
if(value>=1 && value<=100){
target[propKey] = value;
}else{
throw 'The age seems invalid.'
}
}else{
target[propKey] = value;
}
}else{
throw `Prop name ${propKey} does not exist.`
}
}
});
console.log(proxy.name); //hello, 张三
console.log(proxy.age); //30 years old.
console.log(proxy.sex); //err
proxy.age = 120; //err
proxy.sex = 1; //err
评论(0)
暂无评论。