Ik heb een object, x
. Ik zou het willen kopiëren als object y
, zodanig dat veranderingen aan y
x
niet veranderen. Ik realiseerde me dat het kopiëren van objecten die zijn afgeleid van ingebouwde JavaScript-objecten zal resulteren in extra, ongewenste eigenschappen. Dit is geen probleem, want ik kopieer een van mijn eigen, letterlijk geconstrueerde objecten.
Hoe kan ik een JavaScript object correct klonen?
Uit dit artikel: Hoe arrays en objecten te kopiëren in Javascript door Brian Huisman:
Object.prototype.clone = function() {
var newObj = (this instanceof Array) ? [] : {};
for (var i in this) {
if (i == 'clone') continue;
if (this[i] && typeof this[i] == "object") {
newObj[i] = this[i].clone();
} else newObj[i] = this[i]
} return newObj;
};
Hier is een functie die je kunt gebruiken.
function clone(obj) {
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = new obj.constructor();
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
Als er geen circulaire afhankelijkheden in je object zijn, stel ik voor een van de andere antwoorden te gebruiken of jQuery's kopieermethoden, omdat ze allemaal vrij effectief lijken.
Als er circulaire afhankelijkheden zijn (d.w.z. twee sub-objecten linken naar elkaar), ben je een beetje genaaid omdat er (vanuit een theoretisch perspectief) geen manier is om dit probleem elegant op te lossen.