على الرغم من أن JavaScript لا توفر كلمات رئيسية ورثية ، إلا أنه لا يزال بإمكاننا التوصل إلى بعض الطرق الجيدة لتنفيذها.
1. ميراث سلسلة النموذج الأولي:
نسخة الكود كما يلي:
var base = function ()
{
this.vel = 1 ؛
this.name = "base" ؛
this.toString = function () {
إرجاع "قاعدة" ؛
} ؛
} ؛
base.constant = "ثابت" ؛
var sub = function ()
{
} ؛
sub.prototype = new base () ؛
sub.prototype.name = "sub" ؛
المزايا: انطلاقًا من مثيل الكلمة الرئيسية ، فإن المثيل هو مثيل للفئة الأصل ومثال على فئة الطفل ، والذي يبدو أنه ميراث أنقى.
العيوب: الفئات الفرعية تختلف عن خصائص وطرق الفئة الأصل. يجب تنفيذها بشكل منفصل بعد عبارات مثل النموذج الفرعي = قاعدة جديدة () ؛ ولا يمكن لفها في المُنشئ الفرعي. على سبيل المثال: sub.prototype.name = "sub" ؛ لا يمكن تحقيق الميراث المتعدد.
2. بناء الميراث:
نسخة الكود كما يلي:
var base = function ()
{
this.vel = 1 ؛
this.name = "base" ؛
this.toString = function () {
إرجاع "قاعدة" ؛
} ؛
} ؛
base.constant = "ثابت" ؛
var sub = function ()
{
base.call (هذا) ؛
this.name = "sub" ؛
} ؛
المزايا: يمكن تنفيذ الميراث المتعدد ، ويمكن ضبط السمات الفريدة على الفئات الفرعية داخل المنشئ.
العيوب: وجد استخدام مثيل أن الكائن ليس مثيلًا للفئة الأصل.
3. ميراث مثيل:
نسخة الكود كما يلي:
var base = function ()
{
this.vel = 1 ؛
this.name = "base" ؛
this.toString = function () {
إرجاع "قاعدة" ؛
} ؛
} ؛
base.constant = "ثابت" ؛
var sub = function ()
{
var مثيل = قاعدة جديدة () ؛
مثيل. name = "sub" ؛
مثيل العودة ؛
} ؛
المزايا: إنه كائن من الفئة الأصل ، ويمكن الحصول على نفس التأثير باستخدام جديد لبناء كائنات ودون استخدام كائنات جديدة لبناء.
العيوب: الكائن الذي تم إنشاؤه هو في الأساس مثيل للفئة الأصل ، وليس كائن فئة فرعية ؛ لا يتم دعم الميراث المتعدد.
4. نسخ الميراث:
نسخة الكود كما يلي:
var base = function ()
{
this.vel = 1 ؛
this.name = "base" ؛
this.toString = function () {
إرجاع "قاعدة" ؛
} ؛
} ؛
base.constant = "ثابت" ؛
var sub = function ()
{
var base = new base () ؛
لـ (var i in base)
sub.prototype [i] = base [i] ؛
sub.prototype ["name"] = "sub" ؛
} ؛
المزايا: يدعم الميراث المتعدد.
العيوب: كفاءة منخفضة ؛ غير قادر على الحصول على طرق لا يمكن تعدادها من قبل فئة الأصل.
هذه النماذج لها خصائصها الخاصة ، وفقط من حيث الرمز الذي أقدمه ، يفيون الجدول التالي:
2012-1-10: أضيف ، إذا لم نحتاج إلى ميراث فئة ، فنحن نحتاج فقط إلى الميراث الكائن. بالنسبة للمتصفحات التي تدعم eCmascript 5 ، يمكننا أيضًا استخدام الكائن.
نسخة الكود كما يلي:
var base = function ()
{
this.vel = 1 ؛
this.name = "base" ؛
this.toString = function () {
إرجاع "قاعدة" ؛
} ؛
} ؛
base.constant = "ثابت" ؛
var sub = object.create (new base ()) ؛
sub.name = "sub" ؛