是否有可能在没有硬编码类名称“Map”的情况下创建地图?

时间:2017-04-14 16:33:37

标签: javascript ecmascript-6

我尝试编写一个实用函数,它返回一个与其参数相同的对象。除了ES6集合类型(如Map:

)之外,该函数适用于大多数类
function createInstanceOfSameClass(arg) {
    return Object.create(Object.getPrototypeOf(arg));
}

const m1 = new Map();
const m2 = createInstanceOfSameClass(m1);
m2.set(1, "x"); //  Uncaught TypeError: Method Map.prototype.set called on incompatible receiver #<Map>

The jsfiddle is here

2 个答案:

答案 0 :(得分:4)

嗯......你可以这样得到构造函数:

function create(obj){
    return new obj.constructor();
}

答案 1 :(得分:0)

function createInstanceOfSameClass(arg) {
  if(arg.has){
     return new Map();
  }
  if(Array.isArray(arg)){
    return [];
   }
    return Object.create(Object.getPrototypeOf(arg));
}

只需检测它是否为地图/数组...... http://jsbin.com/yimatuquce/edit?console