当使用Proxy 代理数组 setter 时 代理对象调用 proxy.splice(0) 方法时,只会截获到代理对象length 属性的修改,但此时,原数组已被清空,值为undefined length 还在。
所以使用Proxy 代理数组,需要清空时,直接proxy.lenght=0 进行清空操作,
代码如下
let list=[0,1];
let componentList=[{selected:false},{selected:false}];
let proxy=new Proxy(list,{
set:function(target:[], key:string, value,receiver:any){
if(key==='length'){
if(value===0){
for(let v of list){
componentList[v].selected=false;//#报错位置
}
}
}else{
if(list.includes(value)){
list.splice(list.indexOf(value),1);
componentList[value].selected=false;
}else{
componentList[value].selected=true;
}
}
return Reflect.set(target,key,value,receiver);
}
});
proxy.splice(0);//会报错 因为代理不到删除操作 中会拦截到对length的修改此时数组内元素全为undefined
proxy.lenght=0;// length 清零,然后引擎删掉元素