لمعرفة سلسلة النموذج الأولي ، يجب أولاً معرفة نوع الوظيفة. يحتوي الفصل على ميزة مهمة للغاية ، وهي أنه يمكنها إنشاء كائنات معها كقالب يعتمد على مُنشئه. في JavaScript ، تحتوي الوظيفة على وظيفتين
أولاً ، كمكالمة وظيفة عامة
ثانياً ، مُنشئ كائن النموذج الأولي الجديد ()
لنأخذ مثال
نسخة الكود كما يلي:
وظيفة A () {
this.name = 'a' ؛
}
ماذا يحدث عند إنشاء وظيفة؟
أولاً ، سيقوم بإنشاء كائن دالة ، أي نفسه
ثانياً ، سوف ينشئ كائن النموذج الأولي A (يشار إليه بواسطة @)
ثالثًا ، سيكون لكائن الوظيفة مؤشر النموذج الأولي ، والذي يشير إلى كائن النموذج الأولي المقابل ، وهنا يشير إلى A
رابعًا ، يوجد مؤشر مُنشئ في كائن A ، مشيرًا إلى مُنشئه ، ويشير هنا إلى أ
http://img.blog.csdn.net/20140222125611500؟watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqvbgpsmtu3mdex/font/5a6l5l2t/fontsize/400 /الجاذبية/جنوب شرق
ما هو استخدام هذه السمة النموذجية؟
في الواقع ، تمثل سمة النموذج الأولي النطاق الذي يمكن أن تتحكم فيه الوظيفة الحالية (أو تشير إلى من هي الوظيفة الحالية). .
نسخة الكود كما يلي:
وظيفة A () {
this.name = 'a' ؛
}
var a1 = new a () ؛
يشبه هذا اللغات الشائعة الأخرى.
ثم تعديل خصائص النموذج الأولي الذي يشير إلى الكائن سيؤثر على جميع الحالات التي تم إنشاؤها معها كقالب.
نسخة الكود كما يلي:
وظيفة A () {
this.name = 'a' ؛
}
var a1 = new a () ؛
A.Prototype.age = 1 ؛
تنبيه (A1.AGE) ؛
النتائج: 1
ثم لماذا يمكن للكائن A1 الوصول مباشرة إلى سمة العمر؟ أنا لا أحدد سمة العمر في كائن A1.
ذلك لأنه سيكون هناك مرجع في جميع الحالات _proto_ (يمكن الوصول إليه مباشرةً تحت Firfox ، Chrome ، لكن IE لا يدعمه) يشير إلى هذا النموذج الأولي ، ويشير هنا إلى A ،
نسخة الكود كما يلي:
وظيفة A () {
this.name = 'a' ؛
}
var a1 = new a () ؛
تنبيه (A1._Proto_ == A.Prototype)
النتيجة: صحيح
عند الوصول إلى السمات ، ستقوم أولاً بالبحث عن كائن A1. تجدها ، ستعود غير محددة.
في هذه المرحلة ، يخرج معنى سلسلة النموذج الأولي. Object.Prototype هو النموذج الأولي للمستوى العلوي ، لذلك إذا تم تعديل خاصية الكائن.
النظر في قطعة من الكود
نسخة الكود كما يلي:
وظيفة A () {
this.name = 'a' ؛
}
الوظيفة B () {
this.age = 1 ؛
}
B.Prototype = جديد A () ؛
تنبيه (اسم جديد B ().) ؛
نوضح أن B يشير إلى النموذج الأولي لـ B إلى مثيل A ، ثم يمكن لمثيل B أيضًا الوصول إلى خصائص A. هذا هو ميراث JavaScript ، فلماذا يشير النمط B.Protype إلى مثيل ، بدلاً من الإشارة مباشرة إلى النمط A.Protype؟
نسخة الكود كما يلي:
B.Prototype = النموذج A.Protype الجديد ؛
إذا قمت بتعديل الخصائص في النمط p.protype على النحو المكتوب أعلاه ، فإن النموذج الأولي لـ A سوف يتغير أيضًا ، وهو ما يعادل الفئة الفرعية التي تعدل فئة الأصل ، ويتم الجمع بين خصائص الفئة الفرعية والفئة الأصل معًا ، والتي هي بشكل واضح غير لائقة. بمعنى آخر ، يصبح B أيضًا مُنشئ A و A و B علاقات متوازية.
يمكننا تحديده بعد ذلك:
الوظيفة A الوراثة B ، وهي المُنشأة التي تجعل الوظيفة هي مثيل للنموذج الأولي للوظيفة B.
نسخة الكود كما يلي:
var $ = jQuery = function (محدد ، سياق) {
// من المستحيل بناء نفسك مرة أخرى في مُنشئك ، لذلك تم إرجاع مثيل مُنشئ آخر
إرجاع init جديد (محدد ، سياق) ؛
}
jquery.fn = jquery.prototype = {
الحجم: وظيفة () {
إرجاع هذا. الطول ؛
}
}
وظيفة init (المحدد ، السياق) {
}
init.prototype = jquery.fn ؛؛
}
هذا جزء من الكود المصدري لـ jQuery.
باستخدام المعرفة المذكورة أعلاه ، يمكن توضيح أن jQuery مجرد دعوة إلى وظيفة عامة ، والتي تُرجع كائنًا تم إنشاؤه بواسطة مُنشئ آخر من النموذج الأولي jQuery ، أي أنه ، init جديد ()