Kā pareizi klonēt JavaScript objektu?

Man ir objekts x. Es gribētu to kopēt kā objektu y, lai izmaiņas y nemainītu x. Es sapratu, ka, kopējot objektus, kas atvasināti no iebūvētajiem JavaScript objektiem, tiks iegūtas papildu, nevēlamas īpašības. Tā nav problēma, jo es kopēju vienu no saviem, burtiski konstruētiem objektiem.

Kā pareizi klonēt JavaScript objektu?

No šī raksta: Kā kopēt masīvus un objektus Javascript 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;
};
Komentāri (6)

Šeit ir funkcija, ko varat izmantot.

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;
}
Komentāri (4)

Ja objektā nav cirkulāru atkarību, iesaku izmantot kādu no pārējām atbildēm vai jQuery'kopēšanas metodes, jo tās visas šķiet diezgan efektīvas.

Ja ir apļveida atkarības (t.i., divi apakšobjekti ir saistīti viens ar otru), jums ir diezgan grūti, jo (no teorētiskā viedokļa) nav iespējams šo problēmu atrisināt eleganti.

Komentāri (1)