الوظيفة: النموذج الأولي
يحتوي كل مُنشئ على خاصية تسمى النموذج الأولي (النموذج الأولي ، الذي لم يعد مترجمًا أدناه ، يستخدم نصه الأصلي). هذه الخاصية مفيدة للغاية: إعلان المتغيرات أو الوظائف الشائعة لفئة معينة.
تعريف النموذج الأولي
لا تحتاج إلى إعلان خاصية النموذج الأولي صراحة ، لأنه موجود في كل مُنشئ. يمكنك إلقاء نظرة على المثال التالي:
مثال PT1
نسخة الكود كما يلي:
اختبار الوظيفة ()
{
}
تنبيه (Test.Prototype) ؛ // الإخراج "كائن"
أضف خصائص إلى النموذج الأولي
كما ترون أعلاه ، النموذج الأولي هو كائن ، بحيث يمكنك إضافة خصائص إليه. ستصبح السمة التي تضيفها إلى النموذج الأولي سمة شائعة للكائن الذي تم إنشاؤه باستخدام هذا المُنشئ.
على سبيل المثال ، لدي أسماك من نوع البيانات أدناه ، وأريد أن يكون لجميع الأسماك هذه الخصائص: LivesIn = "Water" و Price = 20 ؛ لتحقيق ذلك ، يمكنني إضافة تلك الخصائص إلى النموذج الأولي لأسماك المُنشأة.
مثال PT2
نسخة الكود كما يلي:
وظيفة الأسماك (الاسم ، اللون)
{
this.name = name ؛
this.color = اللون ؛
}
fish.prototype.livesin = "الماء" ؛
fish.prototype.price = 20 ؛
التالي دعنا نكون بعض الأسماك:
نسخة الكود كما يلي:
var fish1 = Fish New ("Mackarel" ، "Gray") ؛
var fish2 = Fish New ("Goldfish" ، "Orange") ؛
var fish3 = Fish New ("Salmon" ، "White") ؛
دعنا نلقي نظرة على ما هي الخصائص السمكية:
نسخة الكود كما يلي:
لـ (int i = 1 ؛ i <= 3 ؛ i ++)
{
var fish = eval_r ("fish"+i) ؛ // أنا فقط أحصل على المؤشر إلى هذه السمكة
ALERT (fish.name+"،"+fish.color+"،"+fish.livesin+"،"+fish.price) ؛
}
يجب أن يكون الإخراج:
نسخة الكود كما يلي:
"ماكاريل ، رمادي ، الماء ، 20"
"سمكة ذهبية ، برتقالية ، ماء ، 20"
"سمك السلمون ، الماء الأبيض ، 20"
ترى أن جميع الأسماك لها يعزو Livein و Price ، ونحن لا نعلن على وجه التحديد هذه السمات لكل سمكة مختلفة. في هذا الوقت ، عند إنشاء كائن ما ، سيقوم المُنشئ بتعيين النموذج الأولي الخاص به إلى السمة الداخلية للكائن الجديد __proto__. يستخدم هذا الكائن __proto__ للعثور على خصائصه.
يمكنك أيضًا استخدام النموذج الأولي لإضافة وظائف شائعة إلى جميع الكائنات. هذا له ميزة واحدة: لا تحتاج إلى إنشاء وتهيئة هذه الوظيفة في كل مرة تقوم فيها ببناء كائن. لشرح ذلك ، دعونا نلقي نظرة على مثال DT9 مرة أخرى وإعادة كتابته باستخدام النموذج الأولي:
استخدم النموذج الأولي لإضافة وظائف إلى الكائنات
مثال PT3
نسخة الكود كما يلي:
موظف الوظيفة (الاسم ، الراتب)
{
this.name = name ؛
هذا.
}
الموظف. النموذج النموذجي.
{
إرجاع هذا.
}
الموظف. النموذج النموذجي.
{
this.salary = this.salary+إضافة ؛
}
يمكننا إنشاء كائنات كما نفعل عادة:
نسخة الكود كما يلي:
var boss1 = موظف جديد ("جوان" ، 200000) ؛
var boss2 = موظف جديد ("Kim" ، 100000) ؛
var boss3 = موظف جديد ("سام" ، 150000) ؛
والتحقق منه:
نسخة الكود كما يلي:
ALERT (BOSS1.GETSALARY ()) ؛ // الإخراج 200000
ALERT (BOSS2.GETSALARY ()) ؛ // الإخراج 100000
ALERT (BOSS3.GETSALARY ()) ؛ // الإخراج 150000
فيما يلي رسم بياني لتوضيح كيفية عمل النموذج الأولي. كل مثيل من هذا الكائن (BOSS1 ، BOSS2 ، BOSS3) لديه خاصية داخلية تسمى __proto__ ، والتي تشير إلى النموذج الأولي للممتلكات في مُنشئها (الموظف). عند تنفيذ GetSalary أو إضافة هذا الكائن ، سيجد هذا الكائن هذا الرمز في __proto__. لاحظ هذا: لا توجد نسخة من الرمز هنا (قارنها بمثال DT8 مخطط).