تحلل هذه المقالة استخدام ميراث سلسلة النموذج الأولي JavaScript. شاركه للرجوع إليه. التحليل المحدد هو كما يلي:
انسخ الرمز على النحو التالي: وظيفة الدالة () {
this.name = 'form' ؛
this.toString = function () {
إرجاع هذا.
}
}
وظيفة twodshape () {
this.name = '2d form' ؛
}
وظيفة المثلث (الجانب ، الارتفاع) {
this.name = 'triangle' ؛
this.side = الجانب ؛
this.height = الارتفاع ؛
this.getarea = function () {
إرجاع this.side*this.height/2 ؛
} ؛
}
/ * الميراث */
twoDshape.prototype = new mapple () ؛
Triangle.Prototype = جديد twodshape () ؛
عندما نعيد كتابة خاصية النموذج الأولي للكائن ، يكون لها في بعض الأحيان تأثير سلبي معين على خاصية مُنشئ الكائن.
لذلك ، بعد إكمال إعداد علاقة الميراث ذات الصلة ، من العادة الجيدة إعادة تعيين سمات const لهذه الكائنات وفقًا لذلك. كما هو موضح أدناه:
نسخة الكود كما يلي: twodshape.prototype.constructor = twodshape ؛
Triangle.prototype.constructor = مثلث ؛
إعادة الكتابة:
انسخ الرمز على النحو التالي: وظيفة الدالة () {}
شكل. prototype.name = 'الشكل' ؛
شكل.
إرجاع هذا.
}
وظيفة twoDshape () {}
twoDshape.prototype = new mapple () ؛
twoDshape.prototype.constructor = twodshape ؛
twoDshape.prototype.name = '2d form' ؛
وظيفة المثلث (الجانب ، الارتفاع) {
this.side = الجانب ؛
this.height = الارتفاع ؛
}
Triangle.Prototype = جديد twodshape ؛
Triangle.prototype.constructor = مثلث ؛
triangle.prototype.name = 'triangle' ؛
triangle.prototype.getarea = function () {
إرجاع this.side*this.height/2 ؛
}
أعد الكتابة مرة أخرى (مرجع التمرير بدلاً من تمرير القيمة):
انسخ الرمز على النحو التالي: وظيفة الدالة () {}
شكل. prototype.name = 'الشكل' ؛
شكل.
إرجاع هذا.
}
وظيفة twoDshape () {}
twoDshape.prototype = form.prototype ؛
twoDshape.prototype.constructor = twodshape ؛
twoDshape.prototype.name = '2d form' ؛
وظيفة المثلث (الجانب ، الارتفاع) {
this.side = الجانب ؛
this.height = الارتفاع ؛
}
Triangle.Prototype = TwoDshape.Prototype ؛
Triangle.prototype.constructor = مثلث ؛
triangle.prototype.name = 'triangle' ؛
triangle.prototype.getarea = function () {
إرجاع this.side*this.height/2 ؛
}
على الرغم من تحسين الكفاءة ، فإن مثل هذه الطريقة لها تأثير جانبي ، لأنها مرجعية تمرير ، وليس قيمة تمرير ، وبالتالي تتأثر قيمة الاسم في "الكائن الأصل".
يشير كائن الطفل والكائن الأصل إلى نفس الكائن. لذلك ، بمجرد أن يغير الكائن الطفل النموذج الأولي الخاص به ، سيتم أيضًا تغيير الكائن الأصل على الفور.
أعد الكتابة مرة أخرى (باستخدام مُنشئ مؤقت):
انسخ الرمز على النحو التالي: وظيفة الدالة () {}
شكل. prototype.name = 'الشكل' ؛
شكل.
إرجاع هذا.
}
وظيفة twoDshape () {}
var f = function () {}
f.prototype = form.prototype ؛
twoDshape.prototype = جديد f () ؛
twoDshape.prototype.constructor = twodshape ؛
twoDshape.prototype.name = '2d form' ؛
وظيفة المثلث (الجانب ، الارتفاع) {
this.side = الجانب ؛
this.height = الارتفاع ؛
}
f.prototype = twodshape.prototype ؛
Triangle.prototype = new f () ؛
Triangle.prototype.constructor = مثلث ؛
triangle.prototype.name = 'triangle' ؛
triangle.prototype.getarea = function () {
إرجاع this.side*this.height/2 ؛
}
على الرغم من تحسين الكفاءة ، فإن مثل هذه الطريقة لها تأثير جانبي ، لأنها مرجعية تمرير ، وليس قيمة تمرير ، وبالتالي تتأثر قيمة الاسم في "الكائن الأصل".
يشير كائن الطفل والكائن الأصل إلى نفس الكائن. لذلك ، بمجرد محاذاة الكائن الطفل النموذج الأولي ويعدله ، سيتم أيضًا تغيير الكائن الأصل على الفور.
آمل أن تكون هذه المقالة مفيدة لبرمجة JavaScript للجميع.