是否可以创建一个没有硬编码类名“Map”的地图?
问题描述:
我试着编写一个实用函数,它返回一个与它的参数相同的对象。此功能工作正常的大多数类,除了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>
答
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
+0
如果它是'Set'会怎么样? – Bergi
'的eval(“VAR OBJ =新“+ className);' –
@RyanMcCullagh不,不是所有的类都有一个名字(你可以访问),它们可能不在范围内,甚至不是唯一的。 – Bergi