,我需要写一个返回一个对象的克隆功能。如何克隆任何对象,包括特殊类型?
喜欢的东西:
// non recursive clone
function clone(obj) {
const newObj = Object.create(Object.getPrototypeOf(obj));
return Object.assign(newObj, obj);
}
这当然只是使用对象,不是基本类型:它不与undefined
,null
,布尔型,数字,字符串,符号工作。
...但它也不适用于其他类型,例如, Array
,Set
,Map
。
我想支持多种类型的,我可以,以及如何做到这一点是通过办理案件特殊类型的情况下,我最好的主意。
我相信Internal Methods or Internal Slots的对象可能会造成问题。我不完全确定这一点,我找不到使用内部方法或插槽的标准类型列表。
准确地创建了哪些标准类型不能正确创建Object.create()
?
在我看来,为什么'Object.create'会创建除了对象之外的其他东西? – evolutionxbox
@evolutionxbox:'Array','Set','Map'等都是对象。 JavaScript中只有7种[数据类型](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures);该文件明确指出:“数组是常数对象,整数键属性和'length'属性之间存在特定关系。”最后'typeof [] ===“object”'。 – peoro
虽然这是真的,但每种对象类型都有特殊的属性。数组有'长度',但是当使用'assign'时这个没有设置。您可能必须为每个“类型”创建自定义“分配”。 – evolutionxbox