【发布时间】:2013-05-06 22:32:30
【问题描述】:
如果深度复制有效,输出将是“Curious George”而不是“Ender's Game”。如何制作深拷贝?对this question 的回答表明$.extend(true, [], obj) 创建了一个深层副本。然而我的例子表明它没有。
function Person(){}
Person.prototype.favorite_books = [];
var george = new Person();
george.favorite_books = ["Curious George"];
var kate = new Person();
kate.favorite_books = ["The Da Vinci Code", "Harry Potter"];
var people = [kate, george];
var people_copy = $.extend(true, [], people);
people_copy[0].favorite_books[0] = "Ender's Game";
$('#text').text(people[0].favorite_books[0]);
解决方案
我更新了 jsFiddle。事实证明,我需要单独深度复制数组中的每个对象如果对象是自定义对象(即,$.isPlainObject 返回 false)。
【问题讨论】:
-
使用 .clone() 见api.jquery.com/clone
-
@Paul Sullivan:
.clone()用于 DOM 实体 -
好的,所以浏览 .extend 源代码,看看为什么递归函数不复制属性
-
@karthikr:你读过这个问题和你提到的答案吗?
-
"事实证明我需要对数组中的每个对象单独进行深度复制。" ...如果您是自定义对象
标签: javascript jquery