赞
踩
当使用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 清零,然后引擎删掉元素
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。