البرمجة

لماذا لا يُلقى JavaScript خطأ عند إنشاء كائن بشكل تكراري؟

في الواقع، السبب وراء عدم حدوث خطأ في هذا الكود هو أن JavaScript تتعامل مع الكائنات المعقدة (Objects) بشكل مختلف عن المتغيرات الأساسية مثل الأعداد والسلاسل النصية. عندما تقوم بإنشاء كائن في JavaScript، يتم تخصيص مساحة في الذاكرة لتخزين الكائن ومؤشر (reference) لهذا الكائن.

في الكود الذي قمت بتقديمه، عندما تقوم بإنشاء كائن من الدالة main باستخدام new main()، يتم إنشاء كائن جديد في الذاكرة وتعيين الخاصية first لتشير إلى نفس الكائن الجديد الذي تم إنشاؤه. وعند استخدام console.log(new main().first);، يتم طباعة القيمة التي يشير إليها first، والتي هي الكائن نفسه.

لذا، بدلاً من رمي خطأ، تسمح JavaScript بإنشاء الكائنات بشكل تكراري بسبب طريقة تعاملها مع إدارة الذاكرة والمؤشرات. تكرار هذا النوع من الكود قد يؤدي في النهاية إلى نفاد الذاكرة (out of memory)، لكن JavaScript لا تفرض قيود صارمة على عمليات الإنشاء الريكورسية.

المزيد من المعلومات

بالطبع! في JavaScript، عندما تقوم بإنشاء كائن باستخدام الكلمة الرئيسية new، يحدث الآتي:

  1. تُنشأ كائن جديد من النوع المعين (في هذه الحالة، الدالة main).
  2. يتم تخصيص مساحة في الذاكرة لتخزين هذا الكائن.
  3. يتم تعيين قيمة this داخل الدالة لتشير إلى الكائن الجديد.

في الكود الذي قدمته، دالة main تنشئ كائنًا جديدًا وتعيّن الخاصية first لتشير إلى الكائن نفسه. ولكن عند استخدام console.log(new main().first);، يتم طباعة القيمة التي يشير إليها first، والتي هي الكائن نفسه. تحدث هذه العملية بدون أي خطأ لأن JavaScript لا تمنع بشكل صارم إنشاء الكائنات بشكل تكراري، بل تعامل معها بشكل طبيعي.

زر الذهاب إلى الأعلى