jsFiddle here.jquery.extend (true, [], obj) non crea una copia profonda
Se la copia profonda ha funzionato, l'output sarebbe "Curious George" e non "Ender's Game". Come posso fare una copia profonda? Una risposta a this question indica che $.extend(true, [], obj)
crea una copia profonda. Eppure il mio esempio mostra che non è così.
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]);
SOLUZIONE
ho aggiornato il jsFiddle. Risulta che è necessario copiare in profondità ogni oggetto nell'array singolarmente se l'oggetto è un oggetto personalizzato (ovvero, $.isPlainObject
restituisce false).
utilizzare .clone() vedere http://api.jquery.com/clone/ –
@Paul Sullivan: '.clone()' deve essere utilizzato con le entità DOM – zerkms
ok, quindi sfogliare il codice sorgente .extend e vedere perché la funzione ricorsiva non copia gli attributi –