كيفية استنساخ كائن في 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); // يطبع "سانت بطرسبرغ" — تغير الأصل مرة أخرى!
```
هل هناك طريقة لعمل نسخ عميقة كاملة؟ هل هناك دوال مدمجة أم يجب كتابة دالة خاصة؟