أساسيات AJAX: تنفيذ الفئات في JavaScript في JavaScript، يمكنك استخدام الكلمة الأساسية للوظيفة لتحديد "فئة" وكيفية إضافة أعضاء إلى الفئة. المتغيرات أو الأساليب المشار إليها من خلال هذا المؤشر داخل إحدى الوظائف ستصبح أعضاء في الفئة. على سبيل المثال:
ما يلي هو مقتطف التعليمات البرمجية:
function class1(){.
فار s="abc";
this.p1=s;
this.method1=function(){
تنبيه ("هذه طريقة اختبار")؛
}
}
فار obj1=new class1();
احصل على الكائن obj1 من خلال new class1()، وسيحصل الكائن obj1 تلقائيًا على السمة p1 وطريقة الأسلوب 1.
في JavaScript، تعريف الوظيفة نفسها هو مُنشئ الفئة. من خلال الجمع بين خصائص الكائنات التي تم تقديمها مسبقًا واستخدام العامل الجديد، يصف ما يلي عملية إنشاء الكائنات باستخدام new.
(1) عندما يواجه المترجم العامل الجديد، فإنه ينشئ كائنًا فارغًا
(2) يبدأ في تشغيل وظيفة class1 ويوجه هذا المؤشر فيه إلى الكائن الذي تم إنشاؤه حديثًا
(3) لأنه عندما لا يكون الكائن موجودًا؛ عند تعيين قيمة لسمة، سيقوم المترجم بإنشاء السمة للكائن، على سبيل المثال، في الفئة 1، عند تنفيذ العبارة this.p1=s، ستتم إضافة السمة p1 وستكون قيمة المتغير s. المخصصة لها، بحيث يكون تنفيذ الوظيفة هو عملية تهيئة هذا الكائن، أي تحقيق دور المنشئ
(4) عند تنفيذ الوظيفة، يقوم المشغل الجديد بإرجاع الكائن الذي تمت تهيئته.
من خلال هذه العملية برمتها، يتم تنفيذ الآلية الأساسية الموجهة للكائنات في JavaScript. يمكن ملاحظة أن تعريف الوظيفة في JavaScript هو في الواقع تنفيذ مُنشئ الكائن، والذي يتم إكماله من خلال الوظائف. عيوب هذه الطريقة هي:
· تجميع كافة عبارات التهيئة وتعريفات الأعضاء معًا، ومنطق الكود ليس واضحًا بما فيه الكفاية، ومن الصعب تنفيذ وظائف معقدة.
· في كل مرة يتم إنشاء مثيل لفئة، يجب تنفيذ المنشئ مرة واحدة. يتم دائمًا إنشاء الخصائص والأساليب المحددة في المُنشئ بشكل متكرر، على سبيل المثال:
ما يلي هو جزء من التعليمات البرمجية:
this.method1=function(){.
تنبيه ("هذه طريقة اختبار")؛
}
في كل مرة تقوم الطريقة 1 هنا بإنشاء مثيل للفئة 1، سيتم إنشاؤها مرة واحدة، مما يتسبب في إهدار الذاكرة. يقدم القسم التالي آلية أخرى لتعريف الفئة: كائن النموذج الأولي، والذي يمكنه حل أوجه القصور الناتجة عن تعريف أعضاء الفئة في المُنشئ.
استخدام كائنات النموذج الأولي لتحديد أعضاء الفصل
قدم القسم السابق آلية تنفيذ الفئات وتنفيذ المنشئات. الآن نقدم آلية أخرى لإضافة أعضاء إلى الفئات: كائنات النموذج الأولي. عند إنشاء دالة جديدة، سيتم تعيين أعضاء الكائن تلقائيًا إلى الكائن الذي تم إنشاؤه، على سبيل المثال:
ما يلي هو مقتطف من التعليمات البرمجية:
<script language="JavaScript" type="text/javascript">
<!--
// تحديد فئة function class1(){ بسمة واحدة فقط Prop
this.prop=1;
}
// استخدم سمة النموذج الأولي للوظيفة لتحديد أعضاء جدد للفئة class1.prototype.showProp=function(){
تنبيه(this.prop);
}
// أنشئ مثيل للفئة 1 var obj1=new class1();
// اتصل بطريقة showProp المحددة من خلال كائن النموذج الأولي obj1.showProp();
//-->
</script>
النموذج الأولي هو كائن JavaScript يمكنه إضافة وتعديل وحذف الأساليب والخصائص إلى كائن النموذج الأولي. يؤدي هذا إلى إضافة تعريفات الأعضاء إلى الفصل الدراسي.
الآن بعد أن فهمنا كائن النموذج الأولي للدالة، دعونا نلقي نظرة على عملية تنفيذ الدالة الجديدة.
(1) أنشئ كائنًا جديدًا واترك هذا المؤشر يشير إليه؛
(2) قم بتعيين جميع أعضاء كائن النموذج الأولي للوظيفة إلى هذا الكائن الجديد؛
(3) تنفيذ نص الوظيفة وتهيئة الكائن
(4) ) يُرجع الكائن
؛أنشأ في (١).
بالمقارنة مع عملية تنفيذ الجديد التي تم تقديمها في القسم السابق، هناك عملية إضافية لاستخدام النموذج الأولي لتهيئة الكائن، وهذا يتوافق أيضًا مع المعنى الحرفي للنموذج الأولي، وهو النموذج الأولي لمثيل الفئة المقابلة. تحدث عملية التهيئة هذه قبل تنفيذ نص الوظيفة (المنشئ)، لذلك يمكن استدعاء الخصائص والأساليب المحددة في النموذج الأولي داخل نص الوظيفة، على سبيل المثال:
ما يلي هو مقتطف من التعليمات البرمجية:
<script language="JavaScript" type="text/javascript">
<!--
// تحديد فئة ذات سمة واحدة فقط Prop
فئة الوظيفة1(){
this.prop=1;
this.showProp();
}
// استخدم سمة النموذج الأولي للوظيفة لتحديد أعضاء جدد للفئة
class1.prototype.showProp=function(){
تنبيه(this.prop);
}
// أنشئ مثيل للفئة 1
فار obj1=new class1();
//-->
</script>
بالمقارنة مع الكود السابق، هنا يتم استدعاء طريقة showProp المحددة في النموذج الأولي داخل الفئة 1، بحيث ينبثق مربع حوار أثناء عملية إنشاء الكائن، يوضح أن قيمة سمة الدعامة هي 1.
تجدر الإشارة إلى أن تعريف كائن النموذج الأولي يجب أن يكون قبل العبارة التي تنشئ مثيل الفئة، وإلا فلن يعمل. على سبيل المثال:
ما يلي هو مقتطف من التعليمات البرمجية:
<script language="JavaScript" type="text/javascript">
<!--
// تحديد فئة ذات سمة واحدة فقط Prop
فئة الوظيفة1(){
this.prop=1;
this.showProp();
}
// أنشئ مثيل للفئة 1
فار obj1=new class1();
// استخدم سمة النموذج الأولي للوظيفة لتحديد أعضاء جدد للفئة بعد العبارة التي تنشئ المثيل. سيكون هذا فعالاً فقط للكائنات التي تم إنشاؤها لاحقًا.
class1.prototype.showProp=function(){
تنبيه(this.prop);
}
//-->
</script>
سيؤدي هذا الرمز إلى إنشاء خطأ في وقت التشغيل، مما يشير إلى أن كائن العرض لا يحتوي على طريقة showProp لأنه يتم تعريف الطريقة بعد العبارة التي تقوم بإنشاء مثيل للفئة.
يمكن ملاحظة أن كائن النموذج الأولي مخصص لأعضاء فئة التصميم ويرتبط ارتباطًا وثيقًا بفئة ما. بالإضافة إلى ذلك، يحتوي النموذج الأولي أيضًا على سمة مهمة: المُنشئ، والذي يمثل مرجعًا
للمُنشئ فيما يلي مقتطف الكود:
فئة الوظيفة1(){
تنبيه (1)؛
}
class1.prototype.constructor(); // اتصل بمنشئ الفصل
بعد تشغيل هذا الرمز، سيظهر مربع حوار مع النص "1" المعروض عليه، وهذا يوضح أن النموذج الأولي يرتبط ارتباطًا وثيقًا بتعريف الفئة. في الواقع: class1.prototype.constructor===class1.
نمط تصميم لفئات JavaScript
لقد قدمنا بالفعل كيفية تعريف فئة وكيفية تهيئة مثيل لفئة ما. يمكن للفئة إضافة أعضاء إلى نص الوظيفة المحدد بواسطة الوظيفة، ويمكنها أيضًا استخدام النموذج الأولي لتحديد أعضاء الفئة يبدو رمز البرمجة مربكًا. كيفية تحديد الفئات بطريقة واضحة؟ ويرد أدناه نمط التنفيذ لفئة.
في JavaScript، نظرًا للطبيعة المرنة للكائنات، يمكن أيضًا إضافة أعضاء إلى الفصل في المُنشئ، مما لا يزيد المرونة فحسب، بل يزيد أيضًا من تعقيد التعليمات البرمجية. من أجل تحسين سهولة القراءة وكفاءة تطوير الكود، يمكنك استخدام هذه الطريقة لتعريف الأعضاء واستخدام كائن النموذج الأولي بدلاً من ذلك، وبهذه الطريقة، يتم تعريف الوظيفة بواسطة مُنشئ الفئة، وهو ما يتماشى مع التنفيذ للفئة التقليدية: اسم الفئة واسم المنشئ متماثلان. على سبيل المثال:
إليك مقتطف الشفرة:
فئة الوظيفة1(){
//المنشئ
}
//تعريف العضو
class1.prototype.someProperty="sample";
class1.prototype.someMethod=function(){
// كود تنفيذ الطريقة
}
على الرغم من أن الكود أعلاه قد جعل تعريف الفئة أكثر وضوحًا، إلا أنه في كل مرة يتم تعريف خاصية أو طريقة، يجب استخدام class1.prototype، ولا يصبح حجم الكود أكبر فحسب، بل إن سهولة القراءة ليست كافية. لمزيد من التحسين، يمكنك استخدام منشئ كائن غير مكتوب لتحديد كائن النموذج الأولي لتنفيذ تعريف العضو للفئة:
ما يلي هو مقتطف من التعليمات البرمجية:
// تحديد فئة class1
فئة الوظيفة1(){
//المنشئ
}
// تحقيق تعريف العضو للفئة عن طريق تحديد كائن النموذج الأولي
class1.prototype={
someProperty:"sample"، someMethod:function(){
// كود الطريقة
},
...//خصائص وطرق أخرى.
}
يحدد الكود أعلاه الفئة 1 بطريقة واضحة جدًا. يتم تنفيذ المُنشئ مباشرةً باستخدام اسم الفئة، ويتم تعريف الأعضاء باستخدام كائنات غير مكتوبة. يتم تنفيذ جميع الخصائص والأساليب في القائمة ويمكن تهيئتها في نفس الوقت تعريف قيمة السمة. وهذا أيضًا يشبه إلى حد كبير تنفيذ الفئات في اللغات التقليدية الموجهة للكائنات. كل ما في الأمر هو أن تعريفات المنشئ وأعضاء الفئة مقسمة إلى جزأين، ويمكن اعتبار ذلك نمطًا ثابتًا لتعريف الفئات في JavaScript، مما يسهل فهمه عند استخدامه.
ملاحظة: يجب إجراء المراجع بين أعضاء الفئة من خلال هذا المؤشر، على سبيل المثال، في طريقة someMethod في المثال أعلاه، إذا كنت تريد استخدام السمة someProperty، فيجب عليك تمرير نموذج this.someProperty، لأنه في JavaScript كل منهما. الخاصية والأساليب مستقلة، فهي متصلة بكائن من خلال هذا المؤشر.