Map、Set的polyfill实现是可以继承的
1if(!this.Map){ 2 //polyfill 3}else{ 4 (function(){//可继承Map替代原生Map 5 var GMap=globalThis.Map; 6 try{ 7 Map.call({}); 8 }catch(e){ 9 globalThis.Map=function(args){ 10 var map=new GMap(args); 11 Object.setPrototypeOf(map,Object.getPrototypeOf(this)); 12 //这里顺便再解决new Map(iterable)的问题,略 13 return map; 14 }; 15 Map.prototype=GMap.prototype; 16 } 17 })(); 18} 19 20if(!this.Set){ 21 //polyfill 略 22}else{ 23 (function(){//可继承Set替代原生Set 24 var GSet=globalThis.Set; 25 try{ 26 Set.call({}); 27 }catch(e){ 28 globalThis.Set=function(args){ 29 var set=new GSet(args); 30 Object.setPrototypeOf(set,Object.getPrototypeOf(this)); 31 //这里顺便再解决new Set(iterable)的问题,略 32 return set; 33 }; 34 Set.prototype=GSet.prototype; 35 } 36 })(); 37}