JavaScriptda sayoz va to'liq nusxalash

E2F8r8WTWul1ZgTpfYGS_25.jpg

Shallow-copy(sayoz-nusxalash) – obyektning bit-wise nusxasi. Yangi yaratilgan obyekt orginal obyektdagi qiymatlarning aynan nusxasiga ega bo’ladi. Agar obyekting birorbir maydoni boshqa obyektga bog’langan bo’lsa, bunda faqat bog’lanish manzili nusxalanadi, ya’ni faqat xotira manzilidan nusxa olinadi

Deep copy(chuqur nusxalash) – barcha maydonlarni nusxalaydi va shu maydonlar bo’yicha dinamik tarzda ajratilgan xotira nusxasini hosil qiladi.

Misol yordamida ikkala turdagi nusxalashni ko’rib chiqaylik.

Sayoz-nusxalashda Yning ichida Xga murojaat qiluvchi nusxasi hosil qilinadi. Buni Xning manzili nusxasi sifatida olishingiz mumkin. Shunday qilib, X va Yning xotiradagi manzillari bir xil bo’ladi. Ya’ni ular xotiraning bir nuqtasiga murojaat qilishadi.

Chuqur nusxalashda Xning barcha maydonlarni to’liq nusxasini Yga oladi va u uchun xotiradan alohida joy ajratadi. Bunda, agar X o’chib ketsa, bu Yga ta’sir qilmaydi.

Quyidagi misolni ko’raylik:

var employeeDetailsOriginal = {  name: 'Alisher', age: 25, Profession: 'Software Engineer' };

Endi undan nusxa olib ko’raylik:

var employeeDetailsDuplicate = employeeDetailsOriginal; //sayoz nusxalash!

Agar o’zgaruvchi qiymatini o’zgartirsak:

employeeDetailsDuplicate.name = 'BoshqaNom';

bunda employeeDetailsDuplicate ning qiymati ham o’zgaradi. Chunki biz sayoz nusxalashni amalga oshirdik. Bu degani biz orginal ma’lumotni yo’qotamiz.

Agar biz boshqa mustaqil nusxani olmoqchi bo’lsak u holda chuqur nusxalashdan foydalanish kerak.

var employeeDetailsDuplicate = {

                    name: employeeDetailsOriginal.name,

                    age: employeeDetailsOriginal.age,

                   profession: employeeDetailsOriginal.Profession

}; //Chuqur nusxalash!

Agar employeeDetailsDuplicate.name ni o’zgartirsak employeeDetailsOriginalga ta’sir qilmaydi

Shunday qilib qanday JaaScript obyektni yangi o’zgaruvchiga orginaliga murojaat qilmaydigan qilib nusxalaymiz? Buni faqat obyektdan klon qilish orqali amalga oshirishimiz mumkin.

Oddiy JSON obyekt uchun quyidagicha bo’lishi mumkin

var objectIsNew = JSON.parse(JSON.stringify(objectIsOld));

    //jQuery ishlatsangiz quyidagidan foydalanishiz mumkin:

    // Sayoz nusxalash

    var objectIsNew = jQuery.extend({}, objectIsOld);

    // Chuqur nusxalash

    var objectIsNew = jQuery.extend(true, {}, objectIsOld);

Faqat JavaScript kod bilan

function keepCloning(objectpassed) {

  if (objectpassed === null || typeof objectpassed !== 'object') {

     return objectpassed;

  }

// orginal obyektning konstruktorining vaqtinchalik saqlashga berish

var temporary_storage = objectpassed.constructor();

  for (var key in objectpassed) {

    temporary_storage[key] = keepCloning(objectpassed[key]);

  }

  return temporary_storage;

}

var employeeDetailsOriginal = {  name: 'Alisher', age: 25, Profession: 'Software Engineer' };

var employeeDetailsDuplicate = (keepCloning(employeeDetailsOriginal));

employeeDetailsOriginal.name = "OzgarganNom";

console.log(employeeDetailsOriginal);

console.log(employeeDetailsDuplicate);