Bir JavaScript nesnesini nasıl doğru şekilde klonlayabilirim?

Bir nesnem var, x. Bunu y nesnesi olarak kopyalamak istiyorum, öyle ki y nesnesinde yapılan değişiklikler x nesnesini değiştirmesin. Yerleşik JavaScript nesnelerinden türetilen nesneleri kopyalamanın ekstra, istenmeyen özelliklerle sonuçlanacağını fark ettim. Bu bir sorun değil, çünkü ben kendi, birebir oluşturulmuş nesnelerimden birini kopyalıyorum.

Bir JavaScript nesnesini nasıl doğru şekilde klonlayabilirim?

Bu makaleden: Javascript'te diziler ve nesneler nasıl kopyalanır Brian Huisman tarafından:

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;
};
Yorumlar (6)

İşte kullanabileceğiniz bir fonksiyon.

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

Nesnenizde döngüsel bağımlılıklar yoksa, diğer yanıtlardan birini veya jQuery'nin kopyalama yöntemlerini kullanmanızı öneririm, çünkü hepsi oldukça etkili görünüyor.

Döngüsel bağımlılıklar varsa (yani, iki alt nesne birbirine bağlanırsa), (teorik açıdan) bu sorunu zarif bir şekilde çözmenin bir yolu olmadığından bir nevi mahvolursunuz.

Yorumlar (1)