我尝试编写一个实用函数,它返回一个与其参数相同的对象。除了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>
答案 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