如果深度复制有效,输出将是“Curious George”而不是“Ender's Game”。如何制作深拷贝?这个问题的答案表明$.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),我需要单独深度复制数组中的每个对象。