Avatar ·

كيفية استنساخ كائن في JavaScript بشكل صحيح: النسخ السطحي والعميق

مرحباً بالجميع! لقد بدأت للتو في تعلم JavaScript وواجهت مشكلة حيرتني. عندما أعيّن كائنًا لآخر، يصبحان مرتبطين بطريقة ما. عند تعديل النسخة، أعدل الأصل أيضًا. إليك مثال: ```javascript let user = { name: "إيفان", age: 30 }; let clone = user; clone.name = "بيتر"; console.log(user.name); // يطبع "بيتر"، بينما كنت أتوقع "إيفان" ``` أفهم أن الكائنات في JavaScript تُمرر بالمرجع، لكن كيف يمكنني عمل نسخة مستقلة حقيقية؟ جربت `Object.assign()`، لكن يبدو أنه لا يعمل بشكل صحيح دائمًا، خاصة إذا كان داخل الكائن كائنات أخرى: ```javascript let user = { name: "آنا", address: { city: "موسكو", street: "تفيرسكايا" } }; let clone = Object.assign({}, user); clone.address.city = "سانت بطرسبرغ"; console.log(user.address.city); // يطبع "سانت بطرسبرغ" — تغير الأصل مرة أخرى! ``` هل هناك طريقة لعمل نسخ عميقة كاملة؟ هل هناك دوال مدمجة أم يجب كتابة دالة خاصة؟