Map、Set的polyfill实现是可以继承的
if(!this.Map){
//polyfill
}else{
(function(){//可继承Map替代原生Map
var GMap=globalThis.Map;
try{
Map.call({});
}catch(e){
globalThis.Map=function(args){
var map=new GMap(args);
Object.setPrototypeOf(map,Object.getPrototypeOf(this));
//这里顺便再解决new Map(iterable)的问题,略
return map;
};
Map.prototype=GMap.prototype;
}
})();
}
if(!this.Set){
//polyfill 略
}else{
(function(){//可继承Set替代原生Set
var GSet=globalThis.Set;
try{
Set.call({});
}catch(e){
globalThis.Set=function(args){
var set=new GSet(args);
Object.setPrototypeOf(set,Object.getPrototypeOf(this));
//这里顺便再解决new Set(iterable)的问题,略
return set;
};
Set.prototype=GSet.prototype;
}
})();
}