يوفر الكائن العام المتغيرات والوظائف المتوفرة في أي مكان. بشكل افتراضي، تلك المضمنة في اللغة أو البيئة.
يُسمى في المتصفح window
، أما بالنسبة لـ Node.js فهو global
، أما بالنسبة للبيئات الأخرى فقد يكون له اسم آخر.
مؤخرًا، تمت إضافة globalThis
إلى اللغة كاسم موحد لكائن عمومي، والذي يجب دعمه في جميع البيئات. إنه مدعوم في جميع المتصفحات الرئيسية.
سنستخدم window
هنا، على افتراض أن بيئتنا عبارة عن متصفح. إذا كان من الممكن تشغيل البرنامج النصي الخاص بك في بيئات أخرى، فمن الأفضل استخدام globalThis
بدلاً من ذلك.
يمكن الوصول إلى جميع خصائص الكائن العام مباشرة:
تنبيه("مرحبا"); // هو نفسه window.alert("مرحبا");
في المتصفح، تصبح الوظائف والمتغيرات العامة المعلنة باستخدام var
(وليس let/const
!) ملكًا للكائن العام:
فار gVar = 5; تنبيه (window.gVar)؛ // 5 (أصبحت خاصية للكائن العمومي)
إعلانات الوظائف لها نفس التأثير (العبارات التي تحتوي على الكلمة الأساسية function
في تدفق التعليمات البرمجية الرئيسي، وليس تعبيرات الوظيفة).
من فضلك لا تعتمد على ذلك! يوجد هذا السلوك لأسباب التوافق. تستخدم البرامج النصية الحديثة وحدات JavaScript حيث لا يحدث مثل هذا الشيء.
إذا استخدمنا let
بدلًا من ذلك، فلن يحدث شيء كهذا:
دع gLet = 5؛ تنبيه (window.gLet)؛ // غير محدد (لا يصبح خاصية للكائن العام)
إذا كانت القيمة مهمة جدًا لدرجة أنك ترغب في إتاحتها عالميًا، فاكتبها مباشرة كخاصية:
// جعل معلومات المستخدم الحالية عامة، للسماح لجميع البرامج النصية بالوصول إليها نافذة.المستخدم الحالي = { الاسم: "جون" }; // في مكان آخر في الكود تنبيه (currentUser.name)؛ // جون // أو إذا كان لدينا متغير محلي باسم "المستخدم الحالي" // احصل عليه من النافذة بشكل صريح (آمن!) تنبيه (window.currentUser.name)؛ // جون
ومع ذلك، لا يُنصح عمومًا باستخدام المتغيرات العالمية. يجب أن يكون هناك أقل عدد ممكن من المتغيرات العالمية. يكون تصميم الكود الذي تحصل فيه الوظيفة على متغيرات "إدخال" وتنتج "نتائج" معينة أكثر وضوحًا وأقل عرضة للأخطاء وأسهل في الاختبار مما لو كانت تستخدم متغيرات خارجية أو عامة.
نحن نستخدم الكائن الشامل لاختبار دعم ميزات اللغة الحديثة.
على سبيل المثال، اختبر ما إذا كان كائن Promise
موجودًا (وهو غير موجود في المتصفحات القديمة حقًا):
إذا (!window.Promise) { تنبيه("متصفحك قديم حقًا!"); }
إذا لم يكن هناك أي شيء (على سبيل المثال، نحن في متصفح قديم)، فيمكننا إنشاء "polyfills": إضافة وظائف لا تدعمها البيئة، ولكنها موجودة في المعيار الحديث.
إذا (!window.Promise) { window.Promise = ... // التنفيذ المخصص لميزة اللغة الحديثة }
يحتوي الكائن العام على متغيرات يجب أن تكون متاحة في كل مكان.
يتضمن ذلك مكونات JavaScript المضمنة، مثل Array
والقيم الخاصة بالبيئة، مثل window.innerHeight
- ارتفاع النافذة في المتصفح.
الكائن العمومي له اسم عالمي globalThis
.
...ولكن يُشار إليها في أغلب الأحيان بأسماء خاصة بالبيئة "التقليدية"، مثل window
(المتصفح) و global
(Node.js).
يجب علينا تخزين القيم في الكائن العمومي فقط إذا كانت عالمية حقًا لمشروعنا. والحفاظ على عددهم في الحد الأدنى.
في المتصفح، ما لم نستخدم الوحدات النمطية، تصبح الوظائف والمتغيرات العامة المعلنة باستخدام var
خاصية للكائن العام.
لجعل الكود الخاص بنا قابلاً للمستقبل وأسهل للفهم، يجب علينا الوصول إلى خصائص الكائن العام مباشرةً، مثل window.x
.