Jeg har et objekt, x
. Jeg vil gerne kopiere det som objekt y
, således at ændringer i y
ikke ændrer x
. Jeg indså, at kopiering af objekter, der er afledt af indbyggede JavaScript-objekter, vil resultere i ekstra, uønskede egenskaber. Dette er ikke noget problem, da jeg kopierer et af mine egne, bogstaveligt konstruerede objekter.
Hvordan kloner jeg et JavaScript-objekt korrekt?
Fra denne artikel: Sådan kopierer du arrays og objekter i Javascript af 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;
};
Her er en funktion, du kan bruge.
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;
}
Hvis der ikke er cirkulære afhængigheder i dit objekt, foreslår jeg at bruge et af de andre svar eller jQuery's copy methods, da de alle virker ret effektive.
Hvis der er cirkulære afhængigheder (dvs. to underobjekter linker til hinanden), er du lidt på røven, da der (ud fra et teoretisk perspektiv) ingen måde at løse dette problem elegant er.