وغني عن القول ، أن هذه الطريقة سهلة الفهم نسبيًا ، ودعا مُنشئ الفئة الأصل في الفئة الفرعية. بالإضافة إلى ذلك ، فإن إحدى أكبر مزايا هذه الطريقة هي أن بناء الميراث يمكن أن يحقق ميراثًا متعدد. راجع هذا الرمز:
نسخة الكود كما يلي:
الوظيفة A ()
{}
الوظيفة ب ()
{}
الوظيفة C ()
{
this.father = a ؛
this.father () ؛
حذف هذا.
this.father = b ؛
this.father () ؛
حذف هذا.
}
لكن هذه الطريقة لديها أيضًا هذا وعلم العيب:
إذا كنت على دراية بالتوجه نحو الكائن ، فلننظر إلى رمز C# هذا:
نسخة الكود كما يلي:
برمجي
{
StaticVoid Main (String [] args)
{
B B = newb () ؛
Bool temp = (typeof (a)). isinstanceoftype (b) ؛
console.writeline (temp) ؛
}
}
فئة
{
الجمهور أ ()
{
}
}
classb: أ
{
العام ب ()
{
}
}
ما هي النتيجة؟ B بالطبع مثال على:
ومع ذلك ، فإننا نقوم بهذا الاختبار في القسم أعلاه من رمز JavaScript الموروث باستخدام بنيات:
نسخة الكود كما يلي:
الوظيفة A ()
{}
الوظيفة ب ()
{}
الوظيفة C ()
{
this.father = a ؛
this.father () ؛
حذف هذا.
this.father = b ؛
this.father () ؛
حذف هذا.
}
var c = new c () ؛
تنبيه (c extryof a) ؛
لكن النتائج ليست ما تخيلنا:
في الواقع ، من السهل توضيح: الميراث المبني هو مجرد خاصية للفئة الأصل التي تم نسخها عن طريق استدعاء طريقة بناء الفئة الأصل. لا توجد عمليات تفتيش أخرى ، لذا لا تسمي العديد من المواد الميراث هذه الميراث.
أثناء رؤية أوجه القصور ، تذكر المزايا: دعم المزيد من الميراث.
عندما ننظر إلى ميراث C# ، وجدنا أن هناك اختلافات نموذجية أكثر من هذا الميراث: لا يدعم C# الميراث المتعدد ، وعيوب الميراث البناء الذي ذكرته أعلاه. لذلك تم إنشاء طريقة ميراث جديدة ، وأصبحنا ميراث النموذج الأولي.
عندما ترى الاسم ، يمكنك أن تفهم تقريبًا أن ميراث النموذج الأولي هو استخدام خصائص النماذج الأولية لتحقيق الميراث. هذه هي الطريقة الأكثر شعبية للميراث في جافا سكريبت. إذا كنت لا تفهم النموذج الأولي ، فالرجاء الانتباه إلى مقال آخر لي: "اللعب مع النموذج الأولي - النموذج الأولي".
دعونا نلقي نظرة على الكود أولاً. هنا ، سأرسم على قطعة من الكود من "The Return of the King of JavaScript":
نسخة الكود كما يلي:
نقطة الوظيفة (الأبعاد)
{
this.dimensional = الأبعاد ؛
this.test = function () {
تنبيه ("النجاح") ؛
}
}
وظيفة point2d (x ، y)
{
this.x = x ؛
this.y = y ؛
}
point2d.prototype = نقطة جديدة (2) ؛
var p = new point2d (3،4) ؛
P.Test () ؛
مرت الاختبار. هذا يدل على أن Point2D قد ورث طريقة الفئة الأصل ، ثم انظر إلى المثيل.
تنبيه (p extryof point) ؛
نجاح! حسنًا ، دعنا نحلل الميراث النموذج الأولي:
لن أتحدث عن مزايا ميراث النموذج الأولي. البنية بسيطة وسهلة الفهم ، ويمكن أن تكون محدودة. لكن أوجه القصور له مهمة أيضا. هل تتذكر مثالي السابق عن الحيوانات والأشخاص والفتاة؟ نستخدم ميراث النموذج الأولي لتنفيذ ما يلي:
نسخة الكود كما يلي:
وظيفة الحيوان ()
{
this.run = function () {Alert ("I Can raun") ؛} ؛
}
وظيفة الناس (الاسم)
{
this.say = function () {Alert ("اسمي"+this.name) ؛}
}
people.prototype = new Animal () ؛
وظيفة الفتاة (الاسم ، العمر)
{
this.age = العمر ؛
this.introduce = function () {Alert ("اسمي"+this.name+". i am"+this.age) ؛} ؛
}
Girl.Prototype = أشخاص جدد (؟؟؟) ؛
يرجى الانتباه إلى خط الرمز في الجزء الأحمر الجريء. الناس هم النموذج الأولي للفتاة. لذلك عندما نهيئة الأشخاص ، يجب أن نمر في المعلمة الاسم ، ولكن اسم كل فتاة مختلف ، لذلك لا يوجد أي فائدة من ميراث النموذج الأولي: في مرحلة ميراث النموذج الأولي ، لا يمكنك تحديد المعلمات التي يجب استخدامها لتهيئة كائن الفئة الأصل. المناسبة 2: الأمر بسيط للغاية. يمكن أن يكون لكل فئة نموذجًا أوليًا واحدًا ، بحيث لا يمكن استخدام ميراث النموذج الأولي للميراث المتعدد. هذا شيء جيد وشيء سيء. لأن:
في اللغات الموجهة نحو الكائنات مثل Java و C#، لا يتم دعم الميراث المتعدد ، ويعتقد أن الميراث المتعدد لا يتوافق مع الكائنات الموجهة إلى الكائن
لا يمكن تنفيذ واجهات متعددة!
حسنًا ، هذا كل ما كتبته اليوم. لتلخيص ، فإن الميراث النموذجية يحل بعض مشاكل البناء الميراث ويقدم بعض المشكلات الجديدة. بشكل عام ، فإن الميراث النموذج الأولي هو طريقة الميراث الأكثر استخدامًا على نطاق واسع ، وهي أيضًا طريقة لتنفيذ الميراث حقًا في قواعد جافا سكريبت!