الطريقة الأولى للنموذج الأولي:
// regling class function person () {this.hair = 'Black' ؛ this.eye = 'Black' ؛ this.skin = 'Yellow' ؛ this.view = function () {return this.hair + '،' + this.eye + '،' + this.skin ؛ }} // function function man () {this.feature = ['Beard' ، 'Strong'] ؛ } man.prototype = new person () ؛ var one = new man () ؛ console.log (one.feature) ؛ // ['Beard' ، 'Strong'] console.log (one.hair) ؛ // Black Console.log (One.eye) ؛ // Black Console.log (One.skin) ؛ // yellow console.log (One.View ()) ؛ // الأسود ، الأسود ، الأصفرهذه الطريقة هي أبسط. تحتاج فقط إلى تعيين قيمة سمة النموذج الأولي للكاسورة الفرعية إلى مثيل ورث ، ثم يمكنك استخدام طريقة الفئة الموروثة مباشرة.
ماذا تعني سمة النموذج الأولي؟ النموذج الأولي هو النموذج الأولي. يحتوي كل كائن (محدد بواسطة الدالة) على خاصية النموذج الأولي الافتراضي ، وهو نوع كائن.
ويتم استخدام هذه السمة الافتراضية لتنفيذ فحص ما يصل إلى السلسلة. هذا يعني أنه إذا لم تكن سمة كائن ما ، فسيتم العثور على السمة من خلال الكائن الذي تنتمي إليه سمة النموذج الأولي. ماذا لو كان لا يمكن العثور على النموذج الأولي؟
ستجد JS تلقائيًا الكائن الذي تنتمي إليه خاصية النموذج الأولي إلى سمة النموذج الأولي ، بحيث ستستمر في الفهرس من خلال النموذج الأولي حتى يتم العثور على الممتلكات أو النموذج الأولي وخالي أخيرًا ("غير محدد") ؛
على سبيل المثال ، في طريقة One.View () في المثال أعلاه ، ستبحث JS أولاً عما إذا كانت هناك طريقة عرض () في المثيل الواحد. نظرًا للا يوجد ، فإنه يبحث عن سمة النمط النمط ، وقيمة النموذج الأولي هي مثيل للشخص.
يحتوي هذا المثيل على طريقة عرض () ، وبالتالي فإن المكالمة ناجحة.
الطريقة الثانية هي تطبيق:
// regling class function person () {this.hair = 'Black' ؛ this.eye = 'Black' ؛ this.skin = 'Yellow' ؛ this.view = function () {return this.hair + '،' + this.eye + '،' + this.skin ؛ }} // function function man () {// person.apply (this ، new array ()) ؛ person.apply (هذا ، []) ؛ this.feature = ['Beard' ، 'Strong'] ؛ } var one = new man () ؛ console.log (one.feature) ؛ // ['Beard' ، 'Strong'] console.log (one.hair) ؛ // Black Console.log (One.eye) ؛ // Black Console.log (One.skin) ؛ // yellow console.log (One.View ()) ؛ // الأسود ، الأسود ، الأصفرملاحظة: إذا كانت المعلمة تطبيق فارغة ، أي أنه لا يتم تمرير أي معلمة ، فسيتم تمريرها من خلال صفيف جديد () و [] ، و Null غير صالح.
النوع الثالث هو استدعاء+النموذج الأولي:
// regling class function person () {this.hair = 'Black' ؛ this.eye = 'Black' ؛ this.skin = 'Yellow' ؛ this.view = function () {return this.hair + '،' + this.eye + '،' + this.skin ؛ }} // function function man () {// person.apply (this ، new array ()) ؛ person.call (هذا ، []) ؛ this.feature = ['Beard' ، 'Strong'] ؛ } man.prototype = new person () ؛ var one = new man () ؛ console.log (one.feature) ؛ // ['Beard' ، 'Strong'] console.log (one.hair) ؛ // Black Console.log (One.eye) ؛ // Black Console.log (One.skin) ؛ // yellow console.log (One.View ()) ؛ // الأسود ، الأسود ، الأصفرتتطلب آلية التنفيذ لطريقة الاتصال رجلاً آخر. النمط النمط = شخص جديد () ؛ لماذا؟
ذلك لأن طريقة الاتصال لا تنفذ سوى استبدال الطريقة ولا ينسخ سمات الكائن.
هذه هي الطريقة التي ترث بها واجهة برمجة تطبيقات خريطة Google.
ما سبق يلخص تنفيذ ثلاث طرق الميراث. لكن كل طريقة لها مزاياها وعيوبها.
إذا كانت فئة الوالدين هكذا:
// شخص وظيفة الفئة الأصل (الشعر ، العين ، الجلد) {this.hair = hair ؛ this.eye = العين ؛ this.skin = الجلد ؛ this.view = function () {return this.hair + '،' + this.eye + '،' + this.skin ؛ }}كيف ينبغي تصميم الفئات الفرعية بحيث يمرر رجل الفئة الفرعية المعلمات إلى شخص فئة الوالدين أثناء إنشاء الكائنات. لا تنطبق طريقة الميراث للنموذج الأولي.
يجب عليك استخدام طريقة التطبيق أو الاتصال:
// تطبيق طريقة // فئة الفرعية وظيفة رجل (الشعر ، العين ، الجلد) {person.apply (هذا ، [الشعر ، العين ، الجلد]) ؛ this.feature = ['Beard' ، 'Strong'] ؛ } // طريقة الاتصال // وظيفة الفئة الفرعية رجل (الشعر ، العين ، الجلد) {person.call (هذا ، الشعر ، العين ، الجلد) ؛ this.feature = ['Beard' ، 'Strong'] ؛ }ولكن لا تزال هناك عيوب لاستخدام طريقة التطبيق. لماذا؟ في JS ، لدينا مشغل مهم للغاية ، وهو "مثيل" ، والذي يتم استخدامه لمقارنة ما إذا كان هناك اتجاه معارض معين من نوع معين.
على سبيل المثال ، بالإضافة إلى كونه نوعًا من الرجل ، يجب أن يكون مثيل واحد أيضًا نوعًا من الشخص. ومع ذلك ، بعد وراثة طريقة التطبيق ، لا ينتمي المرء إلى نوع الشخص ، أي قيمة (مثيل واحد من الشخص) خاطئة.
بعد كل هذا ، فإن أفضل طريقة للوراثة هي طريقة الاتصال+النموذج الأولي. بعد ذلك ، يمكنك تجربة ما إذا كانت قيمة (مثيل واحد من baseclass) صحيحة.
تحتوي طريقة الميراث الثالث أيضًا على عيوب: عند تصنيف كائنات جديدة ، يجب أن تمرر المعلمات المطلوبة من قبل الفئة الأصل ، وسيتم إعادة إنتاج الخصائص والأساليب في الفئة الأصل. طريقة الميراث التالية مثالية:
وظيفة الشخص (الاسم) {this.name = name ؛ } person.prototype.getName = function () {return this.name ؛ } الوظيفة الصينية (الاسم ، الأمة) {person.call (هذا ، الاسم) ؛ this.nation = الأمة ؛ }. subcleass.prototype = new f () ؛ subcleass.prototype.constructor = الفئة الفرعية. وراثة (صينية ، شخص) ؛ invalue.prototype.getNation = function () {return this.nation ؛ } ؛ var p = شخص جديد ('shijun') ؛ var c = صيني جديد ("liyatang" ، "الصين") ؛ console.log (p) ؛ // person {name: "shijun" ، getName: function} console.log (c) ؛ // الصينية {name: "liyatang" ، الأمة: "الصين" ، مُنشئ: وظيفة ، getNation: وظيفة ، getName: function} console.log (p.constructor) ؛ // function person (name) {} console.log (c.Constructor) ؛ // function invalues () {} console.log (c extryof inchines) ؛ // true console.log (c extryof person) ؛ // حقيقيتناقش المقالة أعلاه باختصار أساليب الميراث الثلاثة ومزاياها وعيوبها في JS. هذا هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.