في جافا سكريبت، الميراث هو آلية تسمح بإنشاء فئات جديدة بناءً على الفئات الموجودة؛ يوفر الميراث مرونة للفئات الفرعية ويمكنه إعادة استخدام أساليب ومتغيرات الفئات الأصلية. ويمكن تحقيق عملية الوراثة من عامة إلى خاصة السلاسل والبنائين.
بيئة تشغيل هذا البرنامج التعليمي: نظام Windows 10، إصدار JavaScript 1.8.5، كمبيوتر Dell G3.
وراثة JavaScript هي آلية تسمح لنا بإنشاء فئات جديدة بناءً على الفئات الموجودة؛ فهي توفر المرونة للفئات الفرعية لإعادة استخدام أساليب ومتغيرات الفئات الأصلية. عملية الميراث هي عملية من العام إلى الخاص.
يحافظ على علاقة IS-A.
يتم استخدام الكلمة الأساسية الممتدة في تعبيرات الفئة أو إعلانات الفئة.
باستخدام الكلمة الأساسية الممتدة، يمكننا الحصول على جميع خصائص وسلوكيات الكائنات المضمنة بالإضافة إلى الفئات المخصصة.
يمكننا أيضًا تنفيذ الميراث باستخدام نهج قائم على النموذج الأولي.
كيف تنفذ جافا سكريبت الميراث؟
1. سلسلة النموذج
الفكرة الأساسية: استخدم النماذج الأولية للسماح لنوع مرجعي واحد بأن يرث خصائص وأساليب نوع مرجعي آخر.
العلاقة بين المُنشئين والنماذج الأولية والمثيلات: كل مُنشئ لديه كائن نموذج أولي، ويحتوي كائن النموذج الأولي على مؤشر للمنشئ، ويحتوي المثيل على مؤشر داخلي لكائن النموذج الأولي.
مثال على وراثة تنفيذ سلسلة النموذج الأولي:
function SuperType() {this.property = true;}SuperType.prototype.getSuperValue = function() {return this.property;}function subType() {this.property = false;}//Inherited SuperTypeSubType.prototype = new SuperType ( );SubType.prototype.getSubValue = function (){return this.property;}var example = new SubType();console.log(instance.getSuperValue());//true2. منشئ الاقتراض
الفكرة الأساسية: استدعاء مُنشئ الطبقة الفائقة داخل مُنشئ النوع الفرعي، ويمكن تنفيذ المُنشئ على الكائن المُنشأ حديثًا باستخدام طريقتي call() و application().
مثال:
function SuperType () {this.colors = ["red"، "blue"، "green"]؛} function SubType() {SuperType.call(this);//Inherits SuperType} var example1 = new SubType(); .colors.push("black");console.log(instance1.colors);//"red"، "blue"، "green"، "black" var example2 = new SubType();console.log(instance2 . الألوان)؛//"أحمر"، "أزرق"، "أخضر"3. الميراث الجمع
الفكرة الأساسية: نمط وراثة يجمع بين تقنية تسلسل النماذج الأولية ومنشئي الاقتراض للاستفادة من أفضل ما في العالمين.
مثال:
وظيفة SuperType(name) {this.name = name;this.colors = ["red"، "blue"، "green"]؛}SuperType.prototype.sayName = function() {console.log(this.name); }function SubType(name, age) {SuperType.call(this,name);// السمة الموروثة this.age = age;}// الطريقة الموروثة SubType.prototype = new SuperType();Subtype.prototype.constructor = Subtype; Subtype.prototype.sayAge = function() {console.log(this.age);}var example1 = new SubType("EvanChen",18);instance1.colors.push("black");consol.log(instance1. الألوان)؛//"أحمر"، "أزرق"، "أخضر"، "أسود"instance1.sayName()؛//"EvanChen"instance1.sayAge();//18var example2 = new SubType("EvanChen666",20 );console.log(instance2.colors);//"red"، "blue"، "green"instance2.sayName();//"EvanChen666"instance2.sayAge();//204. الميراث النموذجي
الفكرة الأساسية: تتيح لك النماذج الأولية إنشاء كائنات جديدة بناءً على الكائنات الموجودة دون الحاجة إلى إنشاء أنواع مخصصة.
يمكن توضيح فكرة الميراث النموذجي من خلال الوظيفة التالية:
كائن الوظيفة (س) {وظيفة F () {}F.prototype = o؛return new F ()؛}مثال:
var person = {name:"EvanChen"، friends:["Shelby"، "Court"، "Van"]؛}؛var AnotherPerson = object(person);anotherPerson.name = "Greg";anotherPerson.friends.push( "Rob");var YetAnotherPerson = object(person);yetAnotherPerson.name = "Linda";yetAnotherPerson.friends.push("Barbie");console.log(person.friends);//"Shelby"،"Court" "فان"، "روب"، "باربي"يعمل ECMAScript 5 على توحيد وراثة النموذج الأولي من خلال طريقة Object.create() الجديدة، والتي تقبل معلمتين: كائن يستخدم كنموذج أولي للكائن الجديد وكائن يستخدم ككائن جديد لتحديد خصائص إضافية.
var person = {name:"EvanChen"، friends:["Shelby"،"Court"، "Van"]؛}؛var AnotherPerson = Object.create(person);anotherPerson.name = "Greg";anotherPerson.friends. Push("Rob");var YetAnotherPerson = Object.create(person);yetAnotherPerson.name = "Linda";yetAnotherPerson.friends.push("Barbie");console.log(person.friends);//"Shelby" ""المحكمة"،"فان"،"روب"،"باربي"5. الميراث الطفيلي
الفكرة الأساسية: إنشاء دالة تقوم ببساطة بتغليف عملية الوراثة، وتعزيز الكائن بطريقة ما داخليًا، وإرجاع الكائن كما لو أنه قام بالفعل بكل العمل.
مثال:
وظيفة createAnother(original) {var clone = object(original);clone.sayHi = function () {alert("hi");};return clone;}var person = {name:"EvanChen"، الأصدقاء:["Shelby" ""،"Court"،"Van"]؛}؛var AnotherPerson = createAnother(person);anotherPerson.sayHi();///"hi"6. الوراثة التوافقية الطفيلية
الفكرة الأساسية: ترث الخصائص عن طريق استعارة الوظائف، وترث الأساليب من خلال الشكل الهجين لسلسلة النموذج الأولي
نموذجها الأساسي هو كما يلي:
وظيفة inheritProperty(subType, superType) {var Prototype = object(superType.prototype);// إنشاء كائن Prototype.constructor = subType;// تحسين الكائن subType.prototype = Prototype;// تحديد الكائن}مثال:
function SuperType(name){this.name = name;this.colors = ["أحمر"، و"أزرق"، و"أخضر"]؛}SuperType.prototype.sayName = function (){alert(this.name);}; function SubType(name,age){SuperType.call(this,name);this.age = age;}inheritProperty(SubType,SuperType);SubType.prototype.sayAge = function() {alert(this.age);}