proxy
一个Proxy对象包装另一个对象并拦截诸如读取、写入属性和其他操作,可以选择自行操作它们,或这允许proxy对象透明地处理它们
带有”get“捕捉器的默认值
get(target, property, receiver)
target:目标对象;
property: 目标属性名
receiver: 如果目标属性是一个 getter 访问器属性,则 receiver
就是本次读取属性所在的 this
对象。通常,这就是 proxy
对象本身(或者,如果我们从 proxy 继承,则是从该 proxy 继承的对象)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| let numbers = [0, 1, 2];
numbers = new Proxy(numbers, { get(target, prop) { if (prop in target) { return target[prop]; } else { return 0; // 默认值 } } });
alert( numbers[1] ); // 1 alert( numbers[123] ); // 0(没有这个数组项)
|
使用”set”捕捉器进行验证
1 2 3 4 5 6
| set(target, property, value, receiver):
target —— 是目标对象,该对象被作为第一个参数传递给 new Proxy, property —— 目标属性名称, value —— 目标属性的值, receiver —— 与 get 捕捉器类似,仅与 setter 访问器属性相关。
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| let numbers=[]; numbers= new Proxy(numbers,{ set(target, prop, val){ if(typeof val=='number'){ target[prop]=val; return true;//这里要返回true }else{ return false; } } }); numbers.push(1); console.log(numbers);//[1],添加其他的会报错
|