javascript – 何时需要使用Object.assign()方法来复制对象的实例?

前端之家收集整理的这篇文章主要介绍了javascript – 何时需要使用Object.assign()方法来复制对象的实例?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
以下是我为自己的这个问题的实践做出的一个示例场景.如果您想直接跳过技术细节,请参阅下面的“技术细节”.

我有一个个人项目,我一直在努力学习JavaScript.基本上,用户可以通过选择可用的选项来设计鞋子.

诀窍在于,左右鞋必须具有相同的尺寸以及其他属性,但是诸如颜色,鞋带纹理等的东西可以是每个鞋独立的属性. (我认为这对我来说是一种体面的方法来实践对象的操纵和继承).

用户开始设计合适的鞋子;当单击“交换”按钮以查看左鞋时,用户当前看到右鞋的副本(但是反转).只有在鞋子的第一次交换中,左鞋产生并制作了正确的鞋子的精确副本.从此,保留了每个鞋子方向的独特选项.然后,如果用户对该左鞋型号进行了特定的更改,然后切换到右鞋,则用户应该在点击“交换”按钮之前看到他们原来设计的完全相同的右鞋.

所以如果他们的右鞋子有红色的鞋带,他们会转向左边的鞋子,让左边的鞋子有一个蓝色的花边,然后当切换回右鞋时,用户应该看到红色鞋带!

技术细节

当我编写我的主要项目的代码时,我遇到困难,独特的选择是坚持的.例如,如果我为左边的鞋子制作了绿色的鞋带,那么右边的鞋子总会有绿色的鞋带.排除故障的问题很容易,因为唯一的时间,正确的鞋子失去它是独特的选择,如红色花边,是当我设置左鞋的花边颜色.

console.log("THE RIGHT LACE BEFORE: " + rightShoe.laceId);
leftShoe.laceId = 'green';
console.log("THE RIGHT LACE AFTER: " + rightShoe.laceId);

登录控制台的内容是:

THE RIGHT LACE BEFORE: red

THE RIGHT LACE AFTER: green

即使我没有改变rightShoe,只要我改变了leftShoe属性,它就被改变了.

所以我回到了我第一次定义leftShoe对象的位置,这是用户在脚本生命中第一次点击“交换”(我的业余的想法是为什么传播和填充leftShoe对象,如果用户可能永远不会自定义左鞋?也许这是不必要的数据吝啬,我不知道).从那时起,我从来没有重新定义leftShoe成为rightShoe的副本,反之亦然.我想我被挂断了,我可能正在做对象引用,就像其他语言一样,我正在改变引用而不是值.

在我遇到麻烦之前,我想制作一个JSFiddle来重现问题.由于我的项目冗长(约1500行,包括一些用于图形的THREE.js),我尽力模拟该过程.所以here it is.

除了JSFiddle的工作正如我预期的那样!左侧模型保留了该属性的唯一属性和数据.所以,我做了一些挖掘和阅读关于object.assign()方法.所以在我原来的项目代码(不是小提琴)中,我改变了这一点:

leftShoe = rightShoe;

到这个:

leftShoe = Object.assign({},rightShoe);

令我兴奋的是,我终于得到这个工作,我同样感到困惑和困惑,因为我不明白为什么我的JSFiddle不需要assign()方法,但我相同的项目代码.谢谢.

解决方法

Object.Assign创建了左鞋的新COPY,包括所有可枚举的OWN属性.当您使用leftshoe = righthoe时,您将对左鞋进行参考.一个参考指向同一个对象,而不是一个新的COPY.正如你所说,因此更改引用的属性实际上是改变原来的.

猜你在找的JavaScript相关文章