浅拷贝
了解对象克隆以及浅拷贝的概念。
简介
JavaScript 从最初用于简单动画的玩具语言,发展成为客户端和服务器端 Web 应用开发的重要语言。一些通用的概念也随之进入 JavaScript 领域,开发者对这些概念的认识也日益加深。对象克隆便是其中之一。
对象克隆可能相当复杂。原型继承、引用类型以及与对象关联的方法都可能需要特殊的处理方式。对克隆数据的限制有时可以简化克隆过程。开发者需要根据具体情况理解并选择合适的克隆方法。
浅拷贝:
大多数库的克隆方法都是通过浅拷贝实现的。例如 Underscore.js 中的 _.clone 方法就是一个例子。
原始对象的所有字段键和值都会被复制到新对象中。
No configuration found for ID: fbf4ebaee23921bd65a17dfa04a412a798ba8c678ba680e05bd0a7c5d7f7208e
clonedTransaction 和 shopTransaction 拥有相同的属性。由于 price 和 amountPaid 是值类型(数字),它们的值在克隆时被复制。而 items 属性是引用类型,因此 shopTransaction 和 clonedTransaction 指向内存中完全相同的数组。
在 clonedTransaction 中修改基本类型的值不会影响原始对象。然而,shopTransaction.items 和 clonedTransaction.items 都是指向同一数组的引用。无论通过哪个引用向数组添加元素,结果都会在两个引用中可见。因此,上述代码执行后的结果是:
1clonedTransaction.price = 3 2shopTransaction.price = 1 3clonedTransaction.items.length = 2 4shopTransaction.items.length = 2
通过克隆对象中的引用修改值,也会同时修改原始对象。
以下是对象的可视化表示: