75- دروس جافا سكربت الكائن – JS Object Prototypes

## شرح مفصل عن “JS Object Prototypes” في لغة JavaScript

### مقدمة

تعتبر البرمجة كائنية التوجه (OOP) أحد المفاهيم الأساسية في العديد من لغات البرمجة، وJavaScript ليست استثناءً. تعتمد JavaScript على مفهوم النماذج الأولية (Prototypes) لتمكين الوراثة وإنشاء الكائنات. في هذا المقال، سنقوم بشرح مفهوم النماذج الأولية في JavaScript، وكيف يمكن استخدامها بفعالية في البرمجة.

### ما هي النماذج [شركة برمجة مصرية] الأولية (Prototypes)؟

في JavaScript، كل كائن يمتلك رابطًا إلى كائن آخر يسمى النموذج الأولي (Prototype). هذا النموذج هو أساس الوراثة في JavaScript، حيث يمكن للكائنات أن ترث الخصائص والوظائف من نماذجها الأولية.

### كيفية عمل النماذج الأولية في JavaScript

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

### إنشاء واستخدام النماذج الأولية

#### مثال 1: إنشاء نموذج أولي بسيط

function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.greet = function() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

const person1 = new Person("Alice", 30);
person1.greet(); // Output: Hello, my name is Alice and I am 30 years old.

في هذا المثال، قمنا بإنشاء دالة بناء (Constructor Function) تسمى `Person`. بعد ذلك، أضفنا وظيفة `greet` إلى النموذج الأولي لـ`Person`. يمكن لأي كائن يتم إنشاؤه باستخدام دالة البناء `Person` أن يستفيد من وظيفة `greet`.

#### مثال 2: الوراثة باستخدام النماذج الأولية

function Employee(name, age, jobTitle) {
    Person.call(this, name, age);
    this.jobTitle = jobTitle;
}

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

Employee.prototype.work = function() {
    console.log(`${this.name} is working as a ${this.jobTitle}.`);
};

const employee1 = new Employee("Bob", 25, "Developer");
employee1.greet(); // Output: Hello, my name is Bob and I am 25 years old.
employee1.work();  // Output: Bob is working as a Developer.

هنا، قمنا بإنشاء دالة [شركة برمجة مصرية] بناء جديدة تسمى `Employee` والتي ترث من `Person`. استخدمنا `Object.create` لإنشاء نموذج أولي لـ`Employee` بناءً على النموذج الأولي لـ`Person`. كما أضفنا وظيفة جديدة تسمى `work` إلى النموذج الأولي لـ`Employee`.

### فوائد النماذج الأولية

1. **إدارة الذاكرة بفعالية**: بدلاً من نسخ الوظائف لكل كائن يتم إنشاؤه، يتم تخزين الوظائف في النموذج الأولي، مما يقلل من استخدام الذاكرة.

2. **إمكانية التوسع والوراثة**: يمكن للنماذج الأولية تسهيل الوراثة وتوسيع الكائنات بطرق مرنة وفعالة.

### الخلاصة

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