مجال الأشياء ECMAScript
- الصفحة السابقة نوع الأحداث
- الصفحة التالية تعريف الفئات أو الأحداث
النطاق هو نطاق تطبيق المتغيرات.
النطاق العام، الخاص، وحماية
المفهوم
في التصميم التقليدي للبرمجة الموجهة للكائنات، يتم التركيز بشكل رئيسي على النطاق العام والخاص. يمكن الوصول إلى خصائص الأجسام في النطاق العام من الخارج، أي بعد إنشاء نموذج للجسم يمكن استخدام خصائصه العامة. بينما يمكن الوصول إلى الخصائص في النطاق الخاص فقط داخل الجسم، مما يعني أن هذه الخصائص غير موجودة في العالم الخارجي. هذا يعني أن إذا قام الكائن بتعريف خصائص ومتغيرات خاصة، فإن الفئات الفرعية لا يمكنها الوصول إلى هذه الخصائص والمتغيرات.
يستخدم نطاق الحماية أيضًا لتحديد الخصائص والمتغيرات الخاصة، ولكن يمكن للخصائص والمتغيرات الخاصة الوصول إليها أيضًا من قبل الفئات الفرعية.
ECMAScript يحتوي فقط على نطاق عام
من دون جدوى من مناقشة هذه النطاقات في ECMAScript، لأن ECMAScript يحتوي على نطاق واحد فقط - نطاق عام. جميع الخصائص والمتغيرات في جميع الأجسام في ECMAScript هي عامة. لذلك، عند تعريف فئات وأجسام خاصة، يجب أن تكون حذرًا بشكل خاص. تذكر، جميع الخصائص والمتغيرات هي عامة بشكل افتراضي!
حل مقترح
قدم العديد من المطورين على الإنترنت نماذج نطاق خصائص فعالة، وحلوا هذه المشكلة في ECMAScript.
بسبب عدم وجود نطاق خاص، قرر المطورون مبدأ، يوضح أي خصائص ومتغيرات يجب أن تعتبر خاصة. هذا المبدأ ينص على إضافة خط فاصل قبل وبعد الخاصية:
obj._color_ = "blue";
هذا الكود يحتوي على الخاصية color كخاصة. انتبه، لم يغير الخط الفاصل الخاصية إلى الخاصية العامة، بل أبلغ المطورين الآخرين أن يجب اعتبار هذه الخاصية خاصة.
يحب بعض المطورين أيضًا استخدام خط تحت الشطرنج لتوضيح العQuarteries الخاصة، مثلًا obj._color.]}
نطاق ثابت
تعريف الخصائص والطرق في نطاق الثابت يمكن الوصول إليها في أي وقت من نفس الموقع. في Java، يمكن للفئات أن تملك خصائص وطرق دون الحاجة إلى إنشاء كائن من هذه الفئة، مثلًا فئة java.net.URLEncoder، فإن دالة encode() هي دالة ثابتة.
ليس لدي ECMAScript نطاق ثابت
بشكل صحيح، ECMAScript لا يحتوي على نطاق ثابت. ومع ذلك، يمكنه توفير خصائص وطرق للوكلاء. هل تتذكر؟ الوكلاء هي دوال. الدوال هي كائنات، والكائنات يمكن أن تملك خصائص وطرق. على سبيل المثال:
function sayHello() { alert("hello"); } sayHello.alternate = function() { alert("hi"); } sayHello(); //يظهر "hello" sayHello.alternate(); //يظهر "hi"
في هذا، الدالة alternate() هي في الواقع دالة sayHello. يمكنك إدعاء sayHello() مثل دالة عادية لإظهار "hello"، أو إدعاء sayHello.alternate() لإظهار "hi". حتى الآن، alternate() هي دالة في نطاق العمق العام لـ sayHello()، وليست دالة ثابتة.
الكلمة المفتاحية this
وظيفة this
من بين أكثر المفاهيم المهمة التي يجب أن تُتقن في ECMAScript هو استخدام الكلمة المفتاحية this، وهي تستخدم في الدوال الخاصة بالكائن. الكلمة المفتاحية this دائمًا ما تشير إلى الكائن الذي يتم استدعاء هذه الدالة عليه، مثلًا:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(this.color); }; oCar.showColor(); //يظهر "red"
في الكود السابق، يتم استخدام الكلمة المفتاحية this في دالة showColor() للكائن. في هذا البيئة، this يساوي oCar. الكود التالي له نفس functionality كما في الكود السابق:
var oCar = new Object; oCar.color = "red"; oCar.showColor = function() { alert(oCar.color); }; oCar.showColor(); //يظهر "red"
أسباب استخدام this
لماذا نستخدم this؟ لأنه في عملية إنشاء الكائن، لا يمكن تحديد دائمًا ما سيستخدم المطور اسم المتغير. باستخدام this، يمكنك تكرار استخدام نفس الدالة في عدة أماكن. فكر في المثال التالي:
function showColor() { alert(this.color); }; var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; oCar2.showColor = showColor; oCar1.showColor(); //يتم إخراج "red" oCar2.showColor(); //يتم إخراج "blue"
في الكود السابق، تم استخدام this لتعريف الدالة showColor()، ثم تم إنشاء اثنين من الأجسام (oCar1 و oCar2)، حيث تم تعيين خاصية color للأجسام إلى "red" و "blue" على التوالي. تم تعيين خاصية showColor لكلا الأجسام، مما يشير إلى الدالة showColor() الأصلية (لا توجد مشكلة في الاسم هنا، لأن واحد هو دالة عالمية، والآخر هو خاصية جسم). عند دعوة showColor() لكل جسم، سيتم إخراج oCar1 كـ "red"، بينما سيتم إخراج oCar2 كـ "blue". هذا لأن عند دعوة oCar1.showColor()، يتم تعيين الكلمة المفتاحية this في الدالة إلى oCar1. عند دعوة oCar2.showColor()، يتم تعيين الكلمة المفتاحية this في الدالة إلى oCar2.
الاحتياط، عند مراجعة خصائص الجسم، يجب استخدام الكلمة المفتاحية this. على سبيل المثال، إذا تم استخدام الكود التالي، لن يعمل طريقة showColor()
function showColor() { alert(color); };
إذا لم تستخدم الأحداث أو الكلمة المفتاحية this لمراجعة المتغيرات، سيقوم ECMAScript بمعالجتها كمتغيرات محلية أو عالمية. ثم سيفحص هذا الدالة المتغير المحلي أو العالمي المسمى color، ولكن لن يجده. ما الذي سيحدث؟ سيعرض هذا الدالة "null" في الإشعار.
- الصفحة السابقة نوع الأحداث
- الصفحة التالية تعريف الفئات أو الأحداث