برنامه نویسی

🤯کلونینگ عمیق در مقابل کم عمق ???

توضیحات تصویر

کپی کم عمق

شاخص:

  • فقط ویژگی های سطح بالا کپی می شوند. اشیاء تودرتو با مرجع کپی می شوند.

شاخص ها:

  • اگر تغییر یک شی تودرتو در شیء کپی شده، شیء تودرتوی شی اصلی را نیز تغییر دهد، یک کپی کم عمق است. هم اشیاء تودرتوی اشیاء اصلی و هم کپی شده یک مرجع خواهند داشت.
let original = {
    name: "Alice",
    address: { city: "Wonderland" }
};

let shallowCopy = { ...original }; // Shallow copy

shallowCopy.address.city = "New Wonderland";

console.log(original.address.city); // Output: "New Wonderland"
console.log(shallowCopy.address.city); // Output: "New Wonderland"
console.log(original.address === shallowCopy.address); // Output: true
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

کپی عمیق

شاخص:

  • تمام ویژگی ها، از جمله اشیاء تو در تو، به طور کامل کپی می شوند. هیچ ارجاعی به اشیاء تودرتوی اصلی حفظ نمی شود.

شاخص ها:

  • اگر تغییر یک شی تودرتو در شیء کپی شده، شیء تودرتوی شی اصلی را تغییر ندهد، یک کپی عمیق است.
  • اشیاء تودرتوی اشیاء اصلی و کپی شده ارجاع متفاوتی خواهند داشت.
let original = {
    name: "Alice",
    address: { city: "Wonderland" }
};

let deepCopy = JSON.parse(JSON.stringify(original)); // Deep copy

deepCopy.address.city = "New Wonderland";

console.log(original.address.city); // Output: "Wonderland"
console.log(deepCopy.address.city); // Output: "New Wonderland"
console.log(original.address === deepCopy.address); // Output: false
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

مراحل بررسی نوع کپی

1. ایجاد شی اصلی:

یک شی با ویژگی های تو در تو تعریف کنید.

let original = {
    name: "Alice",
    address: { city: "Wonderland" }
};
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. یک کپی کنید:

با استفاده از روش انتخابی خود یک کپی ایجاد کنید.

let copy = { ...original }; // For shallow copy
// or
let copy = JSON.parse(JSON.stringify(original)); // For deep copy
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. ویژگی Nested Property را در کپی تغییر دهید:

یک ویژگی تودرتو در شیء کپی شده را تغییر دهید.

copy.address.city = "New Wonderland";
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

4. شیء اصلی را بررسی کنید:

ویژگی تو در تو را در شی اصلی مقایسه کنید.

console.log(original.address.city); // Check if this has changed
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

5. مقایسه مراجع:

بررسی کنید که آیا اشیاء تو در تو همان مرجع هستند.

console.log(original.address === copy.address); // true for shallow, false for deep
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

خلاصه

کپی کم عمق:

  • ویژگی های سطح بالا کپی می شوند.
  • اشیاء تو در تو به اشتراک گذاشته می شوند (همان مرجع).
  • تغییر اشیاء تو در تو در کپی بر روی نسخه اصلی تأثیر می گذارد.

کپی عمیق:

  • تمام ویژگی ها، از جمله اشیاء تو در تو، به طور کامل کپی می شوند.
  • اشیاء تودرتو به اشتراک گذاشته نمی شوند (مرجعات مختلف).
  • تغییر اشیاء تو در تو در کپی تاثیری بر نسخه اصلی ندارد.

با دنبال کردن این مراحل و معیارها، می توانید تعیین کنید که یک کپی شی کم عمق یا عمیق است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا