Miten kloonaan JavaScript-objektin oikein?

Minulla on objekti, x. Haluaisin kopioida sen objektiksi y siten, että muutokset y:ssä eivät muuta x:ää. Tajusin, että JavaScriptin sisäänrakennetuista objekteista johdettujen objektien kopiointi johtaa ylimääräisiin, ei-toivottuihin ominaisuuksiin. Tämä ei ole ongelma, koska kopioin yhden oman, kirjaimellisesti rakennetun objektini.

Miten kloonaan JavaScript-objektin oikein?

Tästä artikkelista: Kuinka kopioida matriiseja ja objekteja Javascriptissä kirjoittanut 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;
};
Kommentit (6)

Tässä on toiminto, jota voit käyttää.

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;
}
Kommentit (4)

Jos objektissasi ei ole ympyrämäisiä riippuvuuksia, suosittelen käyttämään jotakin muista vastauksista tai jQueryn kopiointimenetelmiä, sillä ne kaikki vaikuttavat varsin tehokkailta.

Jos on olemassa ympyrämäisiä riippuvuuksia (eli kaksi aliobjektia linkittyy toisiinsa), olet tavallaan kusessa, koska (teoreettisesta näkökulmasta) ei ole mitään tapaa ratkaista tätä ongelmaa tyylikkäästi.

Kommentit (1)