【发布时间】:2016-04-01 13:26:21
【问题描述】:
在我正在处理的项目中,我需要将一个对象克隆到一个变量中。
我第一次尝试 - 似乎是最明显的解决方案 - 做 var obj2 = obj1,但我很快意识到这使得 obj2 refer 到 obj1,所以每当我设置一个属性在obj2 中,属性也在obj1 中更新。好吧,我不能拥有那个。
因此,我开始寻找在 JavaScript 中克隆对象的方法 - 我找到了多种解决方案,主要是 var obj2 = JSON.parse(JSON.stringify(obj1)) - 但这并没有保留我为我的对象定义的所有 getter 和 setter!
现在对我来说最明显的解决方案似乎是首先使用上面的 JSON 技巧使 obj2 拥有 obj1 的所有属性,然后遍历所有对象的 getter 和 setter 并使用 @987654330 将它们添加回来@,但我还没有找到一种方法来获取对象的所有 getter/setter。
【问题讨论】:
-
您需要在您想要的对象上创建自己的
clone方法,该方法创建一个具有相同构造函数的新对象并为其分配相同的值。 -
@AlexD lodash 的
clone不起作用 - 就像任何非 ES5 感知的克隆函数一样,当它尝试复制由“getter”提供的属性时,它只是读取属性的当前值并存储在克隆中,而不是复制 getter 函数本身。 -
@ALexD - 是的 - Alnitak 是 100% 正确的。不复制 getter 只使用它来访问当前值并直接克隆该值...
标签: javascript javascript-objects getter-setter