تصف هذه المقالة استخدام النموذج الأولي في JS. شاركه للرجوع إليه. التحليل المحدد هو كما يلي:
النمط الضوئي في JS هو جزء صعب من JS لفهمه
تعتمد هذه المقالة على نقاط المعرفة التالية:
1 وضع تصميم النموذج الأولي
في .NET ، يمكنك استخدام Clone () لتنفيذ طريقة النموذج الأولي
الفكرة الرئيسية لطريقة النموذج الأولي هي أن هناك الآن فئة أ. أريد إنشاء فئة ب. هذه الفئة نماذج أولية بواسطة A ويمكن توسيعها. نسمي النموذج الأولي ل B's A.
2 يمكن تقسيم طرق JavaScript إلى ثلاث فئات:
طريقة الفئة أ
طريقة كائن B.
طريقة النموذج الأولي
الأمثلة على النحو التالي:
وظيفة الأشخاص (الاسم) {this.name = name ؛ // Object method this.introduce = function () {Alert ("اسمي"+this.name) ؛ }} // method class people.run = function () {Alert ("I Can raun") ؛} // methode people.prototype. p1.Introduce () ؛ people.run () ؛ p1.Introducechinese () ؛3 OBJ1.FUNC.CALL (OBJ)
وهذا يعني أن تعتبر OBJ بمثابة OBJ1 والاتصال بـ FUNC طريقة
حسنًا ، يتم حل المشكلات التالية واحدة تلو الأخرى:
ماذا يعني النموذج الأولي؟
كل كائن في JavaScript لديه سمة النموذج الأولي. إن شرح سمة النموذج الأولي لكائن في JavaScript هو: إرجاع مرجع إلى النموذج الأولي للكائن.
A.Prototype = جديد B () ؛
لا ينبغي الخلط بين فهم النموذج الأولي والميراث. النموذج الأولي لـ A هو مثيل لـ B. يمكن فهم أن جميع الأساليب والخصائص في B. A يمكنها استخدام أساليب وخصائص B. ما تم التأكيد عليه هنا هو الاستنساخ وليس الميراث. يمكن أن يحدث هذا: النموذج الأولي لـ A هو مثيل لـ B ، والنموذج الأولي لـ B هو أيضًا مثيل لـ A.
دعونا نلقي نظرة على مثال على التجربة:
دالة baseclass () {this.showmsg = function () {Alert ("baseClass :: ShowMsg") ؛ }} function extedclass () {} extedclass.prototype = new baseClass () ؛ var extary = new extenclass () ؛ easule.showmsg () ؛ // show baseclass :: showmsgنحدد أولاً فئة BaseClass ، ثم نريد تحديد المدى ، لكننا نعتزم استخدام مثيل من Baseclass كنموذج أولي لاستنساخ ExtensClass يحتوي أيضًا على طريقة كائن ShowMsG.
ExtendClass.Prototype = يمكن قراءة BaseClass () الجديد على النحو التالي: يتم إنشاء تمديد Class مع مثيل من الأساس كاستنساخ نموذج أولي.
ثم سيكون هناك سؤال ، ماذا سيحدث إذا كان ExtendClass نفسه يحتوي على طريقة تحمل نفس اسم طريقة BaseClass؟
هنا التجربة الموسعة 2:
دالة baseclass () {this.showmsg = function () {Alert ("baseClass :: ShowMsg") ؛ }} function extedclass () {this.showmsg = function () {Alert ("extendclass :: showmsg") ؛ }} extendclass.prototype = new baseclass () ؛ var مثيل = new exmclass () ؛ مثيلالأدلة التجريبية: عند تشغيل وظيفة ما ، ستذهب أولاً إلى الوظيفة في علم الأنطولوجيا للبحث. إذا تم العثور عليه ، فسيتم تشغيله. إذا لم يتم العثور عليها ، فسوف يذهب إلى النموذج الأولي للبحث عن الوظيفة. أو يمكن فهم أن النموذج الأولي لن يستنسخ وظائف تحمل نفس الاسم.
ثم سيكون هناك سؤال جديد آخر:
ماذا لو كنت أرغب في استخدام مثيل مثيل ExtendClass لاستدعاء طريقة كائن BaseClass؟
الجواب هو استخدام المكالمة:
extendclass.prototype = new baseclass () ؛ var مثيل = new ExtendClass () ؛ var baseinstance = new baseclass () ؛ baseinstance.showmsg.call (مثيل) ؛ // show baseclass :: showmsg
هنا baseinstance.showmsg.call (مثيل) ؛ اقرأ باسم "مثيل الاتصال كـ BASEINSTANCE ، اتصل على طريقة الكائن الخاصة به" ShowmsG "
حسنًا ، قد يسأل شخص ما هنا لماذا لا baseclass.showmsg.call (مثيل) ؛
هذا هو الفرق بين أساليب الكائن وطرق الفصل. ما نريد أن نسميه هو طريقة كائن BaseClass
أخيرًا ، إذا تم فهم الرمز التالي بوضوح ، فإن ما تقوله هذه المقالة مفهومة بالفعل:
<script type = "text/javaScript"> function baseclass () {this.showmsg = function () {Alert ("baseClass :: Showmsg") ؛ } this.baseshowmsg = function () {Alert ("baseclass :: baseshowmsg") ؛ }} baseclass.showmsg = function () {Alert ("baseclass :: showmsg static") ؛} function extensclass () {this.showmsg = function () {Alert ("extedclass :: showmsg") ؛ }} extendclass.showmsg = function () {Alert ("ExtendClass :: Showmsg static")} extedclass.prototype = new baseclass () ؛ var extenure = new extclass () ؛ extal.showmsg () ؛ // show extclass :: showmsginstance.baseshowmsg () ؛ // show baseclass :: baseshowmsginstance.showmsg () ؛ // show ExtendClass :: ShowMsgbaseClass.showmsg.call (مثيل) ؛ ]آمل أن تكون هذه المقالة مفيدة لبرمجة JavaScript للجميع.