البرمجة

فهم أساسيات ووراثة الكائنات في جافاسكريبت

في عالم تطوير الويب الحديث، يظهر لنا جافاسكريبت كلغة برمجة أساسية تعتمد بشكل كبير على مفهوم الوراثة النموذجية (Prototypal Inheritance). هذا المفهوم يمثل أساسًا لتنظيم الشيفرة وهيكلة الكود في جافاسكريبت، حيث يسمح للكائنات بالتوريث من كائنات أخرى، مما يتيح لنا إعادة استخدام الشيفرة بشكل فعال وفعّال.

في الجزء الأول من هذا النقاش، قمنا بالتعرف على الفكرة الأساسية للوراثة النموذجية في جافاسكريبت، حيث تعتمد على الكائن الأساسي Object والقدرة على إنشاء كائن جديد بالاعتماد على كائن موجود، مما يتيح للكائن الجديد استنساخ الخصائص والطرق من الكائن الأصلي.

الآن، سنتناول المزيد من التفاصيل حول كيفية تحسين فهمنا لهذا المفهوم وكيف يمكننا تحقيق تصميم أكثر كفاءة باستخدام الوراثة النموذجية في جافاسكريبت.

الإنشاء الأفضل للكائنات:

عند البدء في استخدام الوراثة النموذجية في جافاسكريبت، يجب أن نفهم كيفية إنشاء الكائنات بشكل أفضل. يمكننا استخدام الدالة البانيّة (Constructor Function) لتعريف كائن جديد، ومن ثم نستخدم الكلمة الرئيسية new لإنشاء كائن جديد باستخدام هذه الدالة.

javascript
function Animal(name) { this.name = name; } let cat = new Animal('Fluffy'); console.log(cat.name); // Fluffy

في هذا المثال، أنشأنا دالة بانيّة Animal تأخذ اسم الحيوان كمعامل وتعيّنه إلى الخاصية name في الكائن. ثم، قمنا بإنشاء كائن cat باستخدام new Animal('Fluffy').

الاستفادة من السلسلة البروتوتايبية:

الوراثة النموذجية تسمح لنا بإضافة خصائص وطرق جديدة إلى الكائنات باستخدام البروتوتايب الخاص بها. يمكننا القيام بذلك بإضافة الخصائص إلى prototype للدالة البانيّة.

javascript
Animal.prototype.makeSound = function() { console.log('Generic animal sound'); }; cat.makeSound(); // Generic animal sound

هنا، قمنا بإضافة الدالة makeSound إلى prototype لدالة Animal. الآن، يرث جميع الكائنات التي تم إنشاؤها باستخدام Animal هذه الدالة.

التعامل مع الوراثة المتداخلة:

قد يحدث أحيانًا أن نحتاج إلى توريث من كائن يكون هو البناء الأساسي لآخر. يمكن تحقيق ذلك بوضع كائن كـ prototype لدالة بانيّة أخرى.

javascript
function Cat(name, breed) { Animal.call(this, name); this.breed = breed; } Cat.prototype = Object.create(Animal.prototype); Cat.prototype.constructor = Cat; let fluffyCat = new Cat('Fluffy', 'Persian'); fluffyCat.makeSound(); // Generic animal sound console.log(fluffyCat.breed); // Persian

في هذا المثال، أنشأنا دالة بانيّة Cat تستدعي دالة بانيّة Animal باستخدام Animal.call(this, name)، ثم قمنا بتعيين البروتوتايب لـ Cat ليكون Object.create(Animal.prototype).

الختام:

الوراثة النموذجية في جافاسكريبت تمثل أداة قوية لتنظيم الشيفرة وتحسين إعادة استخدام الكود. بفهم أعمق لكيفية إنشاء الكائنات والاستفادة من السلسلة البروتوتايبية، يمكننا بناء تصميمات مرنة وسهلة الصيانة في تطبيقاتنا. يُشجع على الاستمرار في استكشاف هذا المفهوم وتطبيقه بشكل مبتكر لتحقيق أفضل أداء وكفاءة في تطوير البرمجيات باستخدام جافاسكريبت.

المزيد من المعلومات

بالتأكيد، سنقوم الآن بتوسيع فهمنا للوراثة النموذجية في جافاسكريبت وسنستعرض بعض النقاط الإضافية التي قد تسهم في تعميق المعرفة حول هذا الموضوع المهم.

1. تمييز بين prototype و __proto__:

في جافاسكريبت، يوجد اختلاف بين خاصية prototype و __proto__.

  • prototype: تُستخدم في دوال البناء (constructor functions) وتعتبر المكان الذي يتم تعيينه لإضافة الخصائص والأساليب التي يتم مشاركتها بين جميع الكائنات التي تم إنشاؤها باستخدام هذه الدالة.
  • __proto__: تُستخدم على مستوى الكائن الفردي وتحتوي على الرابط إلى البروتوتايب (prototype) الخاص به.
javascript
console.log(cat.__proto__ === Animal.prototype); // true console.log(Animal.prototype.isPrototypeOf(cat)); // true

2. Object.create() لإنشاء كائن ببروتوتايب محدد:

دالة Object.create() تمكننا من إنشاء كائن جديد وتحديد البروتوتايب الذي يرتبط به.

javascript
let dog = Object.create(Animal.prototype); dog.name = 'Buddy'; dog.makeSound(); // Generic animal sound

3. ES6 والكلاسات:

مع مدخلات ECMAScript 2015 (ES6)، تم إضافة مفهوم الكلاسات إلى جافاسكريبت، والذي يسهل كتابة الشيفرة بشكل أكثر وضوحًا وتنظيمًا. الكلاسات في جافاسكريبت تعتمد على الوراثة النموذجية.

javascript
class Dog extends Animal { constructor(name, breed) { super(name); this.breed = breed; } bark() { console.log('Woof!'); } } let bulldog = new Dog('Max', 'Bulldog'); bulldog.makeSound(); // Generic animal sound bulldog.bark(); // Woof!

4. Object.setPrototypeOf():

يمكن استخدام Object.setPrototypeOf() لتغيير البروتوتايب لكائن معين.

javascript
let parrot = { name: 'Polly' }; Object.setPrototypeOf(parrot, Animal.prototype); parrot.makeSound(); // Generic animal sound

5. الوراثة العميقة والسلسلة البروتوتايب:

في بعض الحالات، قد نحتاج إلى الوراثة العميقة حيث يكون هناك عدة مستويات من السلسلة البروتوتايب.

javascript
function Bird(name, species) { Animal.call(this, name); this.species = species; } Bird.prototype = Object.create(Animal.prototype); Bird.prototype.constructor = Bird; let eagle = new Bird('Eddie', 'Golden Eagle'); eagle.makeSound(); // Generic animal sound console.log(eagle.species); // Golden Eagle

باستخدام هذه النقاط، يمكنك توسيع فهمك للوراثة النموذجية في جافاسكريبت وتطبيقها بشكل أفضل في تصميم وتطوير تطبيقات الويب. يجدر بك مواصلة الاستكشاف والتجريب للحصول على خبرة أعمق وتحسين مهاراتك في استخدام هذا المفهوم المهم في بناء تطبيقات جافاسكريبت الحديثة.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر