الميراث وسيلة مهمة للغاية عندما ننفذ البرمجة الموجهة للكائنات. على الرغم من أننا نقول أننا لا نستطيع الإفراط في التنسيق واستخدام المزيد من المجموعات بدلاً من الميراث ، إلا أن الميراث أمر لا مفر منه دائمًا. ما نريد أن نناقشه هنا هو آلية الميراث في JavaScript.
في الواقع ، لا يوجد مفهوم للميراث في JavaScript ، لكن يمكننا تقليده من خلال بعض الوسائل. هذا الميراث في الواقع ينسخ كائنا إلى آخر. تحتاج إلى ملاحظة أن جميع الفئات المحلية والمضيفة لا يمكن أن تراوحت كطبقات أساسية ، وخاصة لاعتبارات الأمان.
هناك حوالي ثلاث فئات من الميراث في JavaScript: 1. انتحال شخصية الكائن ؛ 2. النموذج الأولي الميراث. 3. خلط الاثنين.
1. تقليد الكائن
في الواقع ، يرتبط انتحال شخصية الكائنات ارتباطًا وثيقًا بهذه الكلمة الرئيسية (لذلك من المهم فهم هذه الكلمة الرئيسية تمامًا في JavaScript: P). يستخدم المُنشئ هذا لتعيين القيم للسمات والأساليب ، ويمكن أيضًا اعتبار المنشئ وظيفة عادية ، حتى نتمكن من جعل مُنشئ مُنشئ الفئة A الأساسية من الفئة الفرعية ، ثم استدعاء هذه الوظيفة داخل الفئة الفرعية ، وستحصل الفئة الفرعية على خصائص وطرق الفئة الوالدين.
المبدأ بسيط للغاية ، فكيف ننفذه؟ دعنا نأخذ عملية عملية باستخدام مثال الكود.
طريقة التنفيذ 1 من انتحال شخصية الكائن ، طريقةنا الأكثر استخدامًا لإنشاء كائنات جديدة:
نسخة الكود كما يلي:
var classa = function (name) {
this.name = name ؛
this.alertName = function () {
تنبيه (this.name) ؛
}
}
var classb = function (الاسم ، العمر) {
this.myconstructor = classa ؛
this.myconstructor (الاسم) ؛
حذف this.myconstructor ؛
this.age = العمر ؛
this.alertage = function () {
تنبيه (this.age) ؛
}
}
من أجل التحقق مما إذا كانت الطريقة أعلاه صحيحة ، يمكنك اختبارها بنفسك. سأكتب الرمز المستخدم للاختبار أدناه:
نسخة الكود كما يلي:
var obja = classa new ('dk') ؛
obja.alertname () ؛ // dk
var objb = classb جديد ('ds' ، 20) ؛
objb.alertname () ؛ // ds
objb.alertage () ؛ // 20
وهذا ما يسمى الانتحال الشخصي. بالإضافة إلى ذلك ، هناك طريقتان أخريان لتنفيذ انتحال شخصية الكائنات. على الرغم من أن أساليب تنفيذها مختلفة ، إلا أن مبادئها هي نفسها.
طريقة تنفيذ انتحال شخصية الكائن 2 ، استخدم طريقة الاتصال:
نسخة الكود كما يلي:
var classa = function (name) {
this.name = name ؛
this.alertName = function () {
تنبيه (this.name) ؛
}
}
var classb = function (الاسم ، العمر) {
classa.call (هذا ، الاسم) ؛
this.age = العمر ؛
this.alertage = function () {
تنبيه (this.age) ؛
}
}
يمكن أيضًا رؤيته من خلال الكود أنه في الطريقة الأولى ، أنشأنا مؤشر وظيفة جديد للإشارة إلى الفئة الأصل ، ودعا الوظيفة ، ثم حذفوا المؤشر. هنا نستخدم طريقة الاتصال لتشغيل مُنشئ الفئة الأصل ضمن هذا الكائن ، لتحقيق نفس الغرض. بالإضافة إلى ذلك ، طريقة الاتصال هي طريقة التطبيق.
طريقة تنفيذ انتحال شخصية الكائنات الثلاثة ، استخدم طريقة التطبيق:
نسخة الكود كما يلي:
var classa = function (name) {
this.name = name ؛
this.alertName = function () {
تنبيه (this.name) ؛
}
}
var classb = function (الاسم ، العمر) {
classa.apply (هذا ، صفيف جديد (اسم)) ؛
this.age = العمر ؛
this.alertage = function () {
تنبيه (this.age) ؛
}
}
في الواقع ، يمكنك أن ترى أن طريقة التطبيق تشبه إلى حد كبير طريقة الاتصال ، باستثناء أن المعلمات مختلفة قليلاً.
2. النموذج الأولي الميراث
يجب أن يكون لدى الجميع بعض فهم كائن النموذج الأولي. سيتم تمرير جميع الخصائص والأساليب على كائن النموذج الأولي إلى جميع حالات الفصل. يتم دفع جميع خصائص وطرق الفئة الأم إلى كائن النموذج الأولي لفئة الطفل ، وهو ما يعادل تحقيق ميراثنا.
إذا أرادت الفئة الفرعية الحصول على جميع خصائص وطرق الفئة الأصل ، فسندفع مباشرة مثيلًا من الفئة الأصل إلى كائن النموذج الأولي للكنيسة الفرعية. إذن ، ألا يعادل الفئة الفرعية لدينا الحصول على جميع الكائنات وطرق الفئة الأصل؟
خدمة الكود عينة:
نسخة الكود كما يلي:
var classa = function () {
this.name = 'dk' ؛
this.alertName = function () {
تنبيه (this.name) ؛
}
}
var classb = function (الاسم ، العمر) {
this.name = name ؛
this.age = العمر ؛
}
classb.prototype = new classa () ؛
classb.prototype.alertage = function () {
تنبيه (this.age) ؛
}
لاحظ أن مُنشئ الفئة الأصل هنا يحتاج إلى التأكد من عدم وجود معلمات. لأنه حتى لو كانت هناك معلمات مُنشأة لا يمكنك اجتيازها =. = عند تنفيذ ميراث النموذج الأولي!
3. الميراث المختلط
كما يوحي الاسم ، فإن الميراث الهجين هو الاستخدام المختلط للطريقتين الأولين.
نسخة الكود كما يلي:
var classa = function (name) {
this.name = name ؛
}
classa.prototype.alertname = function () {
تنبيه (this.name) ؛
}
var classb = function (الاسم ، العمر) {
classa.call (هذا ، الاسم) ؛
this.age = العمر ؛
}
classb.prototype = new classa () ؛
classb.prototype.alertage = function () {
تنبيه (this.age) ؛
}
استخدام انتحال شخصية الكائن يطبق معلمات تمرير الفئة الأصل ، واستخدام نماذج ميراث النموذج الأولي يطبق الميراث للطرق العامة.
بعد الحديث عن طرق الميراث في هذه المجالات الثلاثة ، حان الوقت للحديث عن المشكلة أدناه.
قد تكون في حيرة ، لماذا تحتاج إلى إنشاء ميراث مختلط مع انتحال شخصية الكائنات وميراث النموذج الأولي؟ نعم ، أهم شيء هو هذا السؤال.
1. إذا قمت باختباره فعليًا ، فستجد أن الميراث الذي تم تنفيذه بواسطة انتحال شخصية الكائنات ، ولا يمكن للفئة الفرعية الوصول إلى الأساليب في سلسلة النموذج الأولي للفئة الأصل.
2. سوف تحول الوراثة مع النماذج الأولية جميع السمات إلى سمات مشتركة. إذا قمت بتنفيذ حالتين في نفس الفئة الفرعية ، فستجد أن جميع الحالات تشترك في جميع السمات.
3. لكن هذا بالتأكيد غير مناسب. لذلك هناك طريقة للميراث الهجين ، والتي تسمح للسمات بالبقاء خاصًا وتتيح للفئات الفرعية الوصول إلى سلسلة النموذج الأولي للفئة الأصل.
يمكنك تجربة ذلك بنفسك. عندما ينتحل الكائن الميراث ، لا يمكن للفئة الفرعية الوصول إلى طريقة سلسلة النموذج الأولي لفئة الأصل. تشترك جميع حالات سلسلة الفئة الفرعية في سلسلة النموذج الأولي. لن أكتب أمثلة هنا.