2. برمجة جافا سكريبت الموجهة نحو الكائنات: ميراث المنشئين
يقدم هذا القسم بشكل أساسي كيفية إنشاء مثيل "يرث" كائنات متعددة.
على سبيل المثال ، يوجد الآن مُنشئ لكائن "حيوان".
وظيفة animal () {this.species = "Animal" ؛ }يوجد أيضًا مُنشئ كائن "Cat" ،
دالة القط (الاسم ، اللون) {this.name = name ؛ this.color = اللون ؛ }كيف يمكن أن ترث "القطط" "الحيوانات"؟
1. مُنشئ الربط
من المحتمل أن تكون أسهل طريقة هي استخدام طريقة المكالمة أو تطبيقها لربط مُنشئ الكائن الأصل للكائن الطفل ، أي إضافة سطر إلى مُنشئ كائن الطفل:
وظيفة Cat (الاسم ، اللون) {animal.apply (هذا ، الحجج) ؛ this.name = name ؛ this.color = اللون ؛ } var cat1 = new cat ("Hair Hair" ، "Yellow") ؛ تنبيه (cat1.seies) ؛ // حيوان2. وضع النموذج الأولي
النهج الأكثر شيوعًا هو استخدام سمة النموذج الأولي.
إذا كان كائن النموذج الأولي لـ "CAT" يشير إلى مثيل للحيوان ، فيمكن أن تكون جميع حالات "CAT" وريث الحيوانات.
cat.prototype = new Animal () ؛ cat.prototype.constructor = cat ؛ var cat1 = New Cat ("Hair Hair" ، "Yellow") ؛ تنبيه (cat1.seies) ؛ // حيوانفي السطر الأول من الكود ، نوجه كائن النموذج الأولي إلى مثيل للحيوان.
1.cat.prototype = new Animal () ؛
يعادل إزالة القيمة الأصلية لكائن النموذج الأولي تمامًا ثم تعيين قيمة جديدة. ولكن ، ماذا يعني السطر الثاني؟
1.cat.prototype.constructor = cat ؛
اتضح أن أي كائن النموذج الأولي لديه سمة مُنشأة تشير إلى وظيفة مُنشئها. بمعنى آخر ، تشير خاصية مُنشئ كائن Cat.Protype إلى CAT.
لقد قمنا بحذف القيمة الأصلية لكائن النموذج الأولي هذا في الخطوة السابقة ، وبالتالي فإن كائن النموذج الأولي الجديد لا يحتوي على سمة المنشئ ، لذلك يجب أن نضيفه يدويًا ، وإلا ستكون هناك مشاكل في "سلسلة الميراث" اللاحقة. هذا ما يعنيه السطر الثاني.
باختصار ، هذه نقطة مهمة للغاية ، ويجب أن تتبعها عند البرمجة. يتبع كل ما يلي: إذا تم استبدال كائن النموذج الأولي ،
1.O.Prototype = {} ؛
بعد ذلك ، يجب أن تكون الخطوة التالية هي إضافة سمة المنشئ إلى كائن النموذج الأولي الجديد وإحالة هذه السمة مرة أخرى إلى وظيفة المنشئ الأصلية.
1.o.prototype.constructor = o ؛
3. يرث النموذج الأولي مباشرة
منذ أن في الأشياء الحيوانية ، يمكن كتابة الخصائص غير المتغيرة مباشرة إلى Animal.prototype. لذلك ، يمكننا أيضًا أن ندع CAT () تخطي Animal () وروث الحيوانات مباشرة.
الآن ، دعنا نعيد كتابة كائن الحيوان أولاً:
1.function Animal () {}
2.animal.prototype.species = "Animal" ؛
بعد ذلك ، قم بإشارة كائن النموذج الأولي للقط ويشير إلى كائن النموذج الأولي للحيوان ، بحيث يتم الانتهاء من الميراث.
cat.prototype = animal.prototype ؛ catcat.prototype.constructor = cat ؛ var cat1 = New Cat ("Hair Hair" ، "Yellow") ؛ تنبيه (cat1.seies) ؛ // الحيواناتبالمقارنة مع الطريقة السابقة ، فإن ميزة ذلك هي أنها فعالة نسبيًا (لا حاجة لتنفيذ مثيلات حيوانية وإنشاءها) ومزيد من توفير الذاكرة. العيب هو أن cat.prototype و Animal.prototype يشير الآن إلى نفس الكائن ، لذلك سيتم تعديل أي تعديل على cat.prototype في النمط animal.protype.
لذلك ، الرمز أعلاه هو في الواقع مشكلة. يرجى الاطلاع على السطر الثاني
1.cat.prototype.constructor = cat ؛
لقد غيرت هذه الجملة في الواقع سمة مُنشأة لكائن animal.prototype!
1.Alert (animal.prototype.constructor) ؛ // قطة
4. استخدم الكائنات الفارغة كوسيط
نظرًا لأن "الميراث المباشر للنموذج الأولي" له عيوب أعلاه ، يمكن استخدام كائن فارغ كوسيط.
var f = function () {} ؛ f.prototype = animal.prototype ؛ cat.prototype = new f () ؛ cat.prototype.constructor = cat ؛F هو كائن فارغ ، لذلك لا يشغل الذاكرة تقريبًا. في هذا الوقت ، لن يؤثر تعديل كائن النموذج الأولي على كائن النموذج الأولي للحيوان.
1.Alert (animal.prototype.constructor) ؛ // حيوان
5. وظيفة التغليف من وضع النموذج الأولي
نغلف الطريقة أعلاه في وظيفة لسهولة الاستخدام.
وظيفة تمديد (الطفل ، الأصل) {var f = function () {} ؛ f.prototype = parent.prototype ؛ child.prototype = new f () ؛ child.prototype.constructor = الطفل ؛ child.uber = parent.prototype ؛ }عند استخدامه ، تكون الطريقة كما يلي
تمديد (القط ، حيوان) ؛ var cat1 = New Cat ("Hair Hair" ، "Yellow") ؛ تنبيه (cat1.seies) ؛ // حيوانوظيفة التمديد هذه هي طريقة كيفية تنفيذ مكتبة YUI.
أيضا ، دعني أشرح ذلك. السطر الأخير من جسم الوظيفة
1.Child.uber = parent.prototype ؛
وهذا يعني تعيين سمة Uber للكائن الطفل ، والذي يشير مباشرة إلى سمة النموذج الأولي للكائن الأصل. هذا يعادل فتح قناة على كائن الطفل والاتصال مباشرة بأسلوب الكائن الأصل. يتم وضع هذا الخط هنا فقط لتحقيق اكتمال الميراث وهو خاص خاصية احتياطية.
6. نسخ الميراث
ما سبق هو استخدام الكائنات النموذجية لتنفيذ الميراث. يمكننا أيضًا تغيير تفكيرنا واستخدام طريقة "النسخ" لتحقيق الميراث. ببساطة ، إذا تم نسخ جميع خصائص وطرق الكائن الأصل في الكائن الطفل ، فلا يمكن تحقيق الميراث؟
بادئ ذي بدء ، ضع جميع الخصائص التي لم تتغير للحيوان على كائن النموذج الأولي.
1.function Animal () {}
2.animal.prototype.species = "Animal" ؛
ثم ، اكتب وظيفة أخرى لتحقيق الغرض من نسخ الممتلكات.
وظيفة تمديد 2 (الطفل ، الوالد) {var p = parent.prototype ؛ var c = child.prototype ؛ لـ (var i in p) {c [i] = p [i] ؛ } c.Uber = p ؛ }تتمثل وظيفة هذه الوظيفة في نسخ الخصائص في كائن النموذج الأولي للكائن الأصل إلى كائن النموذج الأولي لكائن الطفل واحدًا تلو الآخر.
عند استخدامه ، اكتب هذا:
Extend2 (Cat ، Animal) ؛ var cat1 = New Cat ("Hair Hair" ، "Yellow") ؛ تنبيه (cat1.seies) ؛ // حيوانالمقالة أعلاه تحليل متعمق للبرمجة الموجهة للكائنات في JavaScript هي كل المحتوى الذي أشاركه معك. آمل أن يعطيك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.