Prova questo:
var clone = (function(){
return function (obj) { Clone.prototype=obj; return new Clone() };
function Clone(){}
}());
Ecco cosa sta succedendo.
- Clone è un fittizio costruttore.
- Assegniamo l'oggetto che vogliamo clonare al prototipo del costruttore clone.
- Chiamiamo Clone usando 'nuovo', quindi l'oggetto costruito ha l'oggetto originale come prototipo del suo costruttore aka (non standard)
__proto__
.
L'oggetto clonato condividerà tutte le proprietà dell'oggetto originale senza alcuna copia di ciò che viene fatto. Se le proprietà dell'oggetto clonato vengono assegnate a nuovi valori, non interferiranno con l'oggetto originale. E non è richiesta alcuna manomissione dei built-in.
Ricordare che una proprietà dell'oggetto dell'oggetto appena creato farà riferimento allo stesso oggetto dell'omonima proprietà dell'oggetto clonato. Assegnare un nuovo valore a una proprietà del clone non interferirà con l'originale, ma assegnerà i valori alle proprietà dell'oggetto del clone.
Prova questa in consolle cromata o Firebug:
var user = {
name: "Foo",
email: "[email protected]"
}
var clonedUser = clone(user);
console.dir(clonedUser);
Una spiegazione dettagliata di questa tecnica di clonazione può essere trovato here.
fonte
2010-09-22 23:39:51
Oggetto JavaScript! = Oggetto JSON. L'esempio che hai fornito è un oggetto JavaScript letterale; Ho aggiornato il tuo post di conseguenza. –
buona domanda! Penserò sempre che user2 = user farà una copia, ma no. – Topera
"risposta" più breve: sì e sì. ;) –