يتم الوراثة في JavaScript من خلال سلسلة النموذج الأولي: كل كائن له كائن آخر كنموذج أولي ، ويرث الكائن خصائص من هذا النموذج الأولي. لكل كائن ، هناك ثلاث طرق للوصول إلى كائن النموذج الأولي:
1 .__ proto__. يمكن الوصول إلى كائن النموذج الأولي للكائن من خلال سمة __proto__. يتم دعم هذه الخاصية فقط في Firefox و Safari و Chrome ، وليس في IE و Opera.
2.Object.getPrototypeof (). يمكنك تمرير الكائن كمعلمة إلى الكائن. يتم دعم هذه الطريقة فقط في معيار ECMASCRIPT 5.
3.O.Constructor.Prototype. احصل أولاً على وظيفة المنشئ للكائن ، ثم الوصول إلى كائن النموذج الأولي عن طريق الوصول إلى خاصية النموذج الأولي لوظيفة المنشئ. المتطلب السابق لاستخدام هذه الطريقة هو أن هناك سمة مُنشأة تشير إلى المُنشئ في الكائن.
لتحديد ما إذا كانت هناك علاقة سلسلة النموذج الأولي بين كائنين ، يمكنك استخدام طريقة ISProtype ():
نسخة الكود كما يلي:
var p = {x: 1} ؛
var o = object.create (p) ؛
console.log (p.isprototypeof (o)) ؛ // true
بالنسبة لجميع الكائنات التي تم إنشاؤها مع الحرفية ، فإن كائن النموذج الأولي الخاص بهم هو Object.prototype (ككائن خاص ، الكائن.
نسخة الكود كما يلي:
var x = {a: 18 ، b: 28} ؛
console.log (x .__ proto __) ؛ // object {}
بالنسبة لجميع الكائنات التي تم إنشاؤها مع المشغل الجديد ، فإن كائنات النموذج الأولي هي خصائص النموذج الأولي لوظيفة المُنشأة:
نسخة الكود كما يلي:
var x = {a: 18 ، b: 28} ؛
اختبار الوظيفة (ج) {
this.c = c ؛
}
test.prototype = x ؛
var t = اختبار جديد (38) ؛
console.log (t) ؛ // object {c = 38 ، a = 18 ، b = 28}
console.log (t .__ proto __) ؛ // object {a = 18 ، b = 28}
console.log (t .__ proto __.__ proto __) ؛ // object {}
عملية استخدام المشغل الجديد لإنشاء كائن في JavaScript هي كما يلي:
1. إنشاء كائن فارغ جديد.
2. أشر السمة __proto__ لهذا الكائن إلى سمة النموذج الأولي لوظيفة المنشئ.
3. استخدم هذا الكائن مثل هذه المعلمة وتنفيذ وظيفة المنشئ.
من عملية الإنشاء أعلاه ، يمكننا استخلاص أن جميع الكائنات التي تم إنشاؤها من وظيفة المنشئ نفسها لها سمة __proto__ (أي كائن النموذج الأولي) متساوٍ ، أي كائن نموذج أولي واحد فقط:
نسخة الكود كما يلي:
var t = اختبار جديد (38) ؛
var t2 = اختبار جديد (68) ؛
console.log (t === T2) ؛ // false
console.log (t .__ proto__ === t2 .__ proto __) ؛ // true