لا تدعم Javascript مساحات الأسماء أصلاً وتتطلب حلولاً بديلة.
عندما نقوم بإنشاء مكتبة جافا سكريبت، تلعب مساحة الاسم دورًا مهمًا، حيث يمكننا تغليف ملفات جافا سكريبت المتناثرة (*.js) التي تشكل مكتبة جافا سكريبت في مساحة الاسم دون تحديد وظائف أو فئات عامة. على سبيل المثال، الشخص، الذي يظهر عدة مرات في هذا الفصل، يمكن تغليفه في مساحة اسم مناسبة كجزء من المكتبة:
الكود 5-13:
انسخ رمز الكود كما يلي:
فار كوم = {};
com.anyjava = {};
com.anyjava.Person = الوظيفة(الاسم) {
// الأعضاء الخاصين
فار _name = name;
//Accessor
this.getName = function() {
اسم الإرجاع؛
};
this.setName = الوظيفة(الاسم) {
_الاسم = الاسم؛
};
};
// النموذج الأولي
com.anyjava.Person.prototype = {
أكل: وظيفة () {
تنبيه (this.getName () + "يأكل شيئا.")؛
},
النوم: وظيفة () {
تنبيه (this.getName () + " نائم.")؛
},
المشي: وظيفة () {
تنبيه (this.getName () + "يمشي.")؛
}
};
var dirk = new com.anyjava.Person("Dirk");
ديرك.أكل();
من الكود 5-13، حصلنا على مساحة اسم تتوافق أكثر مع عادات مطوري Java، وعند إنشاء كائن الشخص، يجب علينا أيضًا تحديد مسار مساحة الأوامر الخاصة بنا.
إليك نصيحة صغيرة إذا كنت تستخدم مكتبة JavaScript تم تطويرها بواسطة آخرين وبتخطيط كامل نسبيًا لمساحة الاسم، فقد تتعب من كتابة مساحات أسماء طويلة في كل مرة. على سبيل المثال، إذا كنت تستخدم مكتبة JavaScript التي قمت بتطويرها، ضمن مساحة الاسم com.anyjava.control.ui، فهناك العديد من عناصر التحكم الموسعة في واجهة المستخدم التي تريد استخدامها، وأعتقد أنك لا تريد كتابة var xxx = new com عدة مرات.anyjava.control.ui.XXX(). من خلال تحديد الأسماء المستعارة لمساحة الاسم، يمكننا كتابة تعليمات برمجية أقل تكرارًا، كما هو موضح في الكود 5-14، وهي طريقة أخرى لإنشاء مثيل للشخص في الكود 5-13:
الكود 5-14:
انسخ رمز الكود كما يلي:
var ns = com.anyjava;
فار ديرك = جديد ns.Person("ديرك");
ديرك.أكل();
آخر شيء سأشرحه هو مشكلة يجب الانتباه إليها عند استخدام مساحات الأسماء. عند كتابة مكتبة جافا سكريبت، في معظم الحالات، قد تظهر عبارات تعريف مساحة الاسم في مواقع متعددة في ملف جافا سكريبت في نفس الوقت، أو في ملفات جافا سكريبت المتعددة، ومع ذلك، فإن ميزة لغة جافا سكريبت هي أن آخر متغير تم الإعلان عنه سوف يحل محل المتغير المعلن مسبقًا تتطلب المتغيرات التي تحمل الاسم نفسه الانتباه إلى مسألة التصريحات المتكررة، أي أنه في كل مرة نعلن فيها عن كائن مساحة اسم، يوصى أولاً بتحديد ما إذا كان كائن مساحة الاسم موجودًا بالفعل، كما هو موضح في الكود 5-. 15:
الكود 5-15:
انسخ رمز الكود كما يلي:
if (typeof com.anyjava == "undef") var com.anyjava = {};
بهذه الطريقة يمكننا التأكد من أن كائن "com.anyjava" تم الإعلان عنه مرة واحدة فقط.