Object.assign() ile Nesne Birleştirme ve Klonlama

Bir nesnenin özellikleri ve değerleri doğrudan atanabildiği gibi Object sınıfının .assign() metodu ile (Object.assign() ) de atanabilir. Örnek.

let isci = {
    sicilNo:2023,
    isim:'Ahmet',
    gorev:'Ustabaşı'
};
//isci nesnesine kidem ve maas özelliklerini değerleriyle ekledik.
Object.assign( isci, { kidem:15, maas:9000 } );
alert(isci.maas); //9000 çıktısı verir.

İlk argüman nesnenin kendisi olurken gerisi de nesne tipinde 'anahtar:değer' ikilileridir. Yani Object.assign(object, Object) olarak argümanlar almaktadır.

Var olan bir özelliği .assign() ile atarsanız var olanın üzerine yazar. Örnek.

let isci = {
    sicilNo:2023,
    isim:'Ahmet',
    gorev:'Ustabaşı'
};
Object.assign( isci, { gorev:'İşçi', maas:9000 } );
alert(isci.gorev); //'İşçi' çıktısı verir.
alert(isci.maas); //'9000' çıktısı verir.

Object.assign() ile farklı nesneler birleştirilebilir. Örnek.

let isci = {
    tcNo:12345678900,
    isim:'Güneş Gün',
};
let metrik = {
    kidem:15,
    maas:12000,
};
Object.assign(isci, metrik);
alert(isci.kidem); //'15' çıktısı verir.

Bu fonksiyon klonlama için de kullanılır. Klonlama orijinalden bağımsız bir kopya oluşturmaktır. Referans tipler değeri değil adresi taşıdığı için yapılan değişikliklerden etkilenir. Daha iyi anlamak için şu örneğe bakınız.

Nesnelerin birbirini referans etmeyen bağımsız kopyalarını oluşturup üzerinde çalışmak için Object.assign() fonksiyonunun ilk argümanını boş nesne bırakarak oluşturabilirsiniz. Örnek.

let isci = {
    tcNo:12345678900,
    isim:'Çetin KAYA',
    kidem:15,
    maas:12000,
};

let yeniIsci = Object.assign( {}, isci );
alert(yeniIsci.tcNo); //12345678900
isci.tcNo = 00000000000;
alert(yeniIsci.tcNo); //12345678900 etkilenmedi, bağımsız bir kopya (klon)

Fakat bu kolaylık değerlerde nesne kullanılmışsa işe yaramaz. Örnek.

let isci = {
    tcNo:12345678900,
    isim:'Çetin KAYA',
    metrik:{
        kidem:15,
        maas:12000,
    }
};
let yeniIsci = Object.assign( {}, isci );
alert(yeniIsci.metrik.kidem); // '15'
isci.metrik.kidem = 5;
alert(yeniIsci.metrik.kidem); // '5', etkilendi, değerdeki nesneler klon olamadı.

Bu problem lodash.js kitaplığındaki .cloneDeep() metodu ile çözülebilir. Daha fazlası için bakınız: https://lodash.com/

Last updated