Van egy objektumom, x
. Szeretném azt y
objektumként másolni, úgy, hogy az y
változásai ne módosítsák az x
objektumot. Rájöttem, hogy a beépített JavaScript-objektumokból származó objektumok másolása extra, nem kívánt tulajdonságokat eredményez. Ez nem probléma, mivel egy saját, szó szerint felépített objektumot másolok.
Hogyan klónozhatok helyesen egy JavaScript objektumot?
Ebből a cikkből: <Hogyan másoljunk tömböket és objektumokat Javascriptben - 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;
};
Itt van egy funkció, amelyet használhat.
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;
}
Ha nincsenek körkörös függőségek az objektumodban, javaslom, hogy használd a többi válasz egyikét vagy a jQuery másolási módszereit, mivel ezek mindegyike elég hatékonynak tűnik.
Ha vannak körkörös függőségek (azaz két alobjektum kapcsolódik egymáshoz), akkor eléggé megszívtad, mivel (elméleti szempontból) nincs mód a probléma elegáns megoldására.