دمج الكائنات بأمان؛ التجميد والإحكام
ادمجوا الكائنات من دون مفاجآت، وتجنبوا تلويث النموذج الأولي، واحموا البيانات باستخدام Object.freeze وObject.seal
دمج الكائنات بأمان؛ التجميد والإحكام درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
لماذا الدمج الآمن؟
الهدف: دمج البيانات بأمان وحماية الحالة.
- نفّذ دمجًا سطحيًا باستخدام spread أو Object.assign
- تجنّب تلويث النموذج الأولي عبر تصفية المفاتيح
- استخدم Object.create(null) كهدف آمن
- استخدم freeze وseal لقفل الكائنات

الدمج السطحي (spread)
استخدم spread أو Object.assign({}, a, b) لإنشاء كائن جديد؛ ولا تعدّل المدخلات.
// Shallow merge with spread keeps sources unchanged
const a = { x: 1, y: 2 };
const b = { y: 9, z: 3 };
// Later keys win on conflicts
const merged1 = { ...a, ...b };
console.log("a:", a);
console.log("b:", b);
console.log("merged1:", merged1);

تجنّب تلويث النموذج الأولي
عندما تأتي المفاتيح من مصدر خارجي، أنشئ قائمة سماح/حظر صغيرة واستخدم Object.create(null) بوصفه الهدف.
// Avoid prototype pollution: use a null-prototype target and skip special keys
function safeMergeUntrusted(pairs) {
// target has no prototype
const out = Object.create(null);
// keys to skip
const BLOCK = new Set(["__proto__", "prototype", "constructor"]);
for (const [k, v] of pairs) {
if (typeof k !== "string") continue;
if (BLOCK.has(k)) continue;
out[k] = v;
}
return out;
}
const inputPairs = [
["name", "Ayla"],
["__proto__", { hacked: true }],
["role", "user"]
];
const safe = safeMergeUntrusted(inputPairs);
console.log("safe.name:", safe.name);
console.log("safe.role:", safe.role);
console.log("safe.__proto__ is undefined?", safe.__proto__ === undefined);

الاستنساخ ثم الإسناد
يُعدّ Object.assign({}, ...) نمطًا آمنًا يسهل على المبتدئين قراءته.
// Object.assign can also create a new object
const base = { a: 1, b: 2 };
const patch = { b: 5 };
// New object as first arg → sources untouched
const merged2 = Object.assign({}, base, patch);
console.log("base:", base);
console.log("patch:", patch);
console.log("merged2:", merged2);

الفرق بين freeze وseal
يمنع freeze جميع التغييرات، بينما يمنع seal الإضافة والحذف، لكنه يسمح بتحديث الخصائص الموجودة.
// Freeze: no add/remove/change
const frozen = Object.freeze({ id: 1, tag: "locked" });
// Seal: no add/remove, but you may change existing values
const sealed = Object.seal({ id: 2, tag: "open" });
// Attempts (silently fail in non-strict mode)
frozen.tag = "new";
sealed.tag = "updated";
sealed.newKey = 123;
console.log("frozen:", frozen);
console.log("sealed:", sealed);

عادات الدمج الآمن
نصائح:
- فضّل الكائنات الجديدة: {...a, ...b} أو Object.assign({}, a, b).
- للمفاتيح غير الموثوقة: استخدم Object.create(null) وتجاوز __proto__ وprototype وconstructor.
- احمِ الإعدادات باستخدام Object.freeze، واحمِ النماذج باستخدام Object.seal.

اختبار أساسيات تلويث النموذج الأولي
تحقّق سريع: ما الهدف الأكثر أمانًا لعمليات الدمج غير الموثوقة؟

مراجعة
مراجعة: ادمج البيانات بإنشاء كائنات جديدة، وصفِّ المفاتيح غير الموثوقة، واستخدم freeze/seal لحماية هياكل البيانات المهمة.

الأسئلة الشائعة
هل درس «دمج الكائنات بأمان؛ التجميد والإحكام» مجاني؟
نعم — نص درس «دمج الكائنات بأمان؛ التجميد والإحكام» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «دمج الكائنات بأمان؛ التجميد والإحكام»؟
ادمجوا الكائنات من دون مفاجآت، وتجنبوا تلويث النموذج الأولي، واحموا البيانات باستخدام Object.freeze وObject.seal تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 3.
كم من الوقت يستغرق درس «دمج الكائنات بأمان؛ التجميد والإحكام»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التحقق من المدخلات وأساسيات الهروب
- دمج الكائنات بأمان؛ التجميد والإحكام
- حدود الأخطاء (مفاهيميًا) من دون أطر عمل