jsFiddle here.jquery.extend (đúng, [], obj) không tạo bản sao sâu
Nếu sao chép sâu hoạt động, đầu ra sẽ là "Curious George" chứ không phải "Trò chơi của Ender". Làm thế nào tôi có thể tạo một bản sao sâu? Câu trả lời cho this question cho biết rằng $.extend(true, [], obj)
tạo bản sao sâu. Tuy nhiên, ví dụ của tôi cho thấy rằng nó không.
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
tôi cập nhật các jsFiddle. Nó chỉ ra tôi cần phải sâu sao chép từng đối tượng trong mảng riêng lẻ nếu đối tượng là một đối tượng tùy chỉnh (có nghĩa là, $.isPlainObject
trả về false).
sử dụng .clone() xem http://api.jquery.com/clone/ –
@Paul Sullivan: '.clone()' là được sử dụng với các thực thể DOM – zerkms
okay để duyệt .extend mã nguồn và xem tại sao chức năng đệ quy không sao chép các thuộc tính –