jsFiddle here。jquery.extend(true,[],obj)不创建深度复制
如果深度复制工作,输出将是“好奇的乔治”,而不是“恩德的游戏”。我怎样才能做一个深层复制?对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]);
SOLUTION
我更新的jsfiddle。事实证明,如果对象是自定义对象(即,$.isPlainObject
返回false),我需要深度复制阵列中的每个对象。
使用.clone()请参阅http://api.jquery.com/clone/ – 2013-05-12 22:44:11
@Paul Sullivan:'.clone()'将与DOM实体 – zerkms 2013-05-12 22:44:44
一起使用,所以请浏览.extend源代码并查看原因递归函数不复制属性 – 2013-05-12 22:45:48