在我正在处理的项目中,我需要将对象克隆到一个变量中。我最初尝试了似乎是最显然的解决方案 -
var obj2 = obj1
,但我很快意识到这会使obj2
引用obj1
,因此每当我在obj2
中设置属性时,属性也会更新在obj1
上。好吧,我不能这么做。因此,我开始寻找在JavaScript中克隆对象的方法 - 我找到了多种解决方案,主要是var obj2 = JSON.parse(JSON.stringify(obj1))
- 但这并没有保留我为对象定义的所有getter和setter!现在对我来说最明显的解决方案似乎是首先使用上述JSON技巧,使obj2
具有obj1
的所有属性,然后循环遍历对象的所有getter和setter,并使用Object.defineProperty()
将它们添加回去,但我还没有找到一种方法来获取对象的所有getter/setter。
clone
方法,该方法将使用相同的构造函数创建一个新对象并将相同的值分配给它。 - Louay Alakkadclone
无法工作 - 就像任何不具备ES5兼容性的克隆函数一样,当它尝试复制由“getter”提供的属性时,它只是读取该属性的当前值并将其存储在克隆中,而不是复制getter函数本身。 - Alnitak