jsFiddle here.jquery.extend (true, [], obj) 딥 복사본을 만들지 않음
딥 복사가 작동하면 출력은 "Ender 's Game"이 아니라 "Curious George"가됩니다. 깊은 사본을 만들려면 어떻게해야합니까? 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()를 참조 http://api.jquery.com/clone/ –
@ 폴 설리반'.clone는()'DOM 개체와 – zerkms
좋아 너무 .extend 검색 소스 코드를 사용하고 이유를 볼 수있다 재귀 함수는 속성을 복사하지 않습니다 –