مقدمة الميراث
الميراث في JS هو موضوع معقد للغاية ، أكثر تعقيدًا من الميراث في أي لغة أخرى موجهة نحو كائن. في معظم اللغات الأخرى الموجهة للكائنات ، يتطلب وراثة الفصل كلمة رئيسية واحدة فقط. من أجل تحقيق الغرض من ورث أعضاء العامين في JS ، يجب اتخاذ سلسلة من التدابير. JS هو ميراث النموذج الأولي. بفضل هذه المرونة ، يمكننا استخدام الميراث القياسي المستند إلى الفصل أو ميراث النموذج الأولي الدقيق. يجب أن يكون واضحًا في JS أن جميع الميراث يتم من خلال النموذج الأولي ، ويرث JS بناءً على الأشياء.
الوراثة:
وظيفة animal (name) {this.name = name ؛ this.showname = function () {Alert (this.name) ؛ }} function cat (name) {animal.call (this ، name) ؛ } var cat = new cat ("Black Cat") ؛ cat.showname () ؛Animal.Call (هذا) يعني استخدام كائن حيوان بدلاً من هذا الكائن. ثم ألا يكون هناك كل خصائص وطرق الحيوانات في القط؟ يمكن لكائن CAT استدعاء طرق وخصائص الحيوانات مباشرة.
ميراث متعدد:
دالة class10 () {this.showsub = function (a ، b) {Alert (ab) ؛ }} function class11 () {this.showadd = function (a ، b) {Alert (a+b) ؛ }} function class2 () {class10.call (this) ؛ class11.call (هذا) ؛ }الأمر بسيط للغاية ، باستخدام مكالمتين لتحقيق ميراث متعدد
بالطبع ، هناك طرق أخرى لروث JS ، مثل استخدام سلاسل النموذج الأولي ، والتي لا تقع في نطاق هذه المقالة ، ولكنها تشرح فقط استخدام المكالمة هنا. الحديث عن المكالمة ، بالطبع هناك أيضا تطبيق. هاتان الطريقتان تعني أساسا نفس الشيء. الفرق هو أن المعلمة الثانية للمكالمة يمكن أن تكون من أي نوع ، في حين يجب أن تكون المعلمة الثانية للتطبيق صفيفًا أو وسيطًا.
فيما يلي وصف لكيفية تنفيذ الميراث البسيط في JavaScript؟
المثال التالي سيقوم بإنشاء موظف فئة الموظف يرث جميع الخصائص في النموذج الأولي النموذج من الشخص.
موظف الوظيفة (الاسم ، الجنس ، الموظف) {this.name = name ؛ this.sex = sex ؛ this.employeeId = effecteeId ؛} // توجيه النموذج الأولي للموظف إلى مثيل للشخص// لأن مثيل الشخص يمكنه استدعاء أساليب النموذج الأولي للشخص ، يمكن لمثيل الموظف أيضًا استدعاء جميع الخصائص في النموذج الأليفي للشخص. الموظف. النموذج = new person () ؛ effect.prototype.getEmployeId = function () {return this.employeId ؛} ؛ var Zhang = new ameister ("Zhangsan" ، "man" ، "") ؛ console.log (zhang.getname ()) ؛ // "Zhangsanالتنفيذ أعلاه للميراث قاسي وهناك العديد من المشاكل:
يتم إنشاء مثيل للشخص عند إنشاء مُنشئ الموظف والنموذج الأولي (المشار إليه فيما يلي باسم الفصل) ، وهو أمر غير مناسب.
لا يمكن أن يدعو مُنشئ الموظف إلى مُنشئ شخص فئة الأصل ، مما يؤدي إلى مهام متكررة للاسم وسمات الجنس في مُنشئ الموظف.
ستتخطى الوظائف في الموظف وظائف تحمل نفس الاسم شخصيًا ، دون أن تكون آليات التحميل الزائد (والآخر هي مشكلة النوع).
بناء الجملة لإنشاء فصول JavaScript منتشرة للغاية وليس أنيقة مثل بناء الجملة في C#/java.
هناك خطأ في الإشارة إلى سمة المنشئ في التنفيذ.