Если будет выполнено глубокое копирование, выход будет "Curious George", а не "Ender 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 Game";
$('#text').text(people[0].favorite_books[0]);
Решение
Я обновил jsFiddle. Оказывается, мне нужно глубоко скопировать каждый объект в массиве индивидуально , если объект является настраиваемым объектом (то есть $.isPlainObject
возвращает false).