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.
//İLKEL (DEĞER) TİP
let str = 'Değer';
let yeni = str;
alert(yeni); // 'Değer'
str = 'Yeni Değer';
//atanadığı değişkenin
//değerinin değişmesinden
//etkilenmez.
alert(yeni); // 'Değer'//REFERANS (ADRES) TİP
let obj = { p1:'Değer'};
let yeni = obj;
alert(yeni.p1); // 'Değer'
obj.p1 = 'Yeni Değer';
//atanadığı nesnenin
//değerinin değişmesinden
//etkilenir.
alert(yeni.p1); // 'Yeni Değer'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