هناك فرق كبير بين ميراث JavaScript وميراث OOP القياسي. النموذج الأولي.
عندما var c = new c () ، c .__ proto__ = c.prototype ؛
عندما يزور C "متغيرات الأعضاء" ، إذا لم يكن من الممكن الحصول على النمط C.Protype للعثور عليه. يتم تخصيص الآخرين أثناء التعريف (يتم مشاركة كل كائن). سيتم مشاركة تعديل جميع حالات الكائنات ، والتي تنتهك النية الأصلية لتصميم الطبقة.
على سبيل المثال:
نسخ رمز رمز على النحو التالي:
'package'.j (function () {
'class a'.j (function () {
jpublic ({{{{
v: {a: 1}
}) ؛
JPrivate ({{
P: {A: 1}
}) ؛
JProtect ({{
x: {a: 1}
}) ؛
}) ؛
'الفئة B يمتد A'.J (function () {
}) ؛
}) ؛
var b1 = new b () ؛
b1.va = 5 ؛
b1.xa = 5 ؛
var b2 = new b () ؛
console.log (b1.va) // الإخراج كـ 5
console.log (b1.xa) // الإخراج كـ 5
console.log (b2.va) // الإخراج هو أيضًا 5 ، غير متوقع 1
console.log (b2.xa) // الإخراج 1
console.log (b2.pa) // غير قابلة للتطبيق ، سوف يطالب p دون وجود
كيف تحل هذه المشكلة؟
أ. لا يتم تعريف "متغير العضو" (هو كائن في حد ذاته) مثل V على السلسلة الأصلية ، ولكنه يسمى في المُنشئ في هذا الوقت ، عند إنشاء مثيل كائن ، سيتم تعيينه على الكائن. __proto__.
يوفر JS ++ طريقة مماثلة ، طالما يتم تخصيص "متغير الأعضاء" أو "وظيفة العضو" المحددة في JPRIVAL على __proto__ ، وسيتم تعيين هذا المثيل فقط.
ب. لا يقرأ "متغير العضو" فقط قراءة سلسلة النموذج الأولي فقط (إنه كائن في حد ذاته)
أعضاء "متغيرات الأعضاء" (نفسها كائنات) محددة من قبل C.JPublic ، فقط قراءة الأعضاء فقط ، تذكر عدم تعيينه ، وإلا فإنه سيتم مشاركته في حالات مختلفة.