الكائنات في JavaScript (Objects)
المصفوفة ممتازة لحفظ قائمة من الأشياء المتشابهة. لكن ماذا لو أردت أن تصف شيئاً واحداً له صفات كثيرة، مثل طالب له اسم وعمر ومدينة؟ هنا نستخدم الكائنات (Objects). في هذا الدرس ستتعلم كيف تنشئ كائناً، وتقرأ خصائصه وتعدّلها، وتضع بداخله دوالاً، وتجمع عدة كائنات في مصفوفة.
ما هو الكائن؟
Section titled “ما هو الكائن؟”الكائن مثل بطاقة الهوية: فيها خانات لها أسماء (الاسم، تاريخ الميلاد، المحافظة)، وفي كل خانة قيمة. في الكائن نسمي كل خانة خاصية (Property)، ولكل خاصية مفتاح وقيمة:
const student = { name: "منى", age: 14, city: "طنطا",};الكائن يُكتب بين قوسين معقوفين { }. كل خاصية مكتوبة على شكل المفتاح: القيمة، وبين الخصائص فواصل. ويمكن أن تكون القيمة من أي نوع: نص أو رقم أو قيمة منطقية أو مصفوفة أو حتى كائن آخر.
قراءة الخصائص
Section titled “قراءة الخصائص”هناك طريقتان للوصول إلى قيمة خاصية:
console.log(student.name);console.log(student["age"]);منى14- النقطة
student.name: الطريقة الأشهر والأسهل. - الأقواس المربعة
student["age"]: مفيدة عندما يكون اسم الخاصية مخزناً في متغير.
وإذا طلبت خاصية غير موجودة، تحصل على undefined بدون خطأ:
console.log(student.phone);undefinedالتعديل والإضافة والحذف
Section titled “التعديل والإضافة والحذف”student.age = 15; // تعديلstudent.school = "مدرسة النور"; // إضافة خاصية جديدةdelete student.city; // حذف خاصيةconsole.log(student);{ name: 'منى', age: 15, school: 'مدرسة النور' }الدوال داخل الكائن (Methods)
Section titled “الدوال داخل الكائن (Methods)”يمكن أن تكون قيمة الخاصية دالة، وتسمى عندها دالة الكائن (Method). وداخلها تشير الكلمة this إلى الكائن نفسه:
const car = { brand: "Toyota", speed: 0, accelerate() { this.speed += 20; console.log(`السرعة الآن ${this.speed}`); },};
car.accelerate();car.accelerate();السرعة الآن 20السرعة الآن 40الكلمة this تعني «هذا الكائن»، فـ this.speed تعني «سرعة هذه السيارة». بهذا تجتمع البيانات (السرعة) والأفعال (زيادة السرعة) في مكان واحد. ولاحظ أن console.log نفسها دالة داخل الكائن console!
المرور على خصائص الكائن
Section titled “المرور على خصائص الكائن”const prices = { tea: 10, coffee: 25 };
for (const key in prices) { console.log(key, prices[key]);}
console.log(Object.keys(prices));console.log(Object.values(prices));tea 10coffee 25[ 'tea', 'coffee' ][ 10, 25 ]- حلقة
for...inتمر على مفاتيح الكائن. ولأن المفتاح في متغير، نستخدم الأقواس المربعةprices[key]. Object.keysتعطيك مصفوفة بالمفاتيح، وObject.valuesمصفوفة بالقيم.
مصفوفة من الكائنات
Section titled “مصفوفة من الكائنات”هذا من أكثر الأشكال شيوعاً في البرامج الحقيقية: قائمة منتجات، أو قائمة مستخدمين، كل عنصر فيها كائن:
const products = [ { name: "قلم", price: 5 }, { name: "حقيبة", price: 120 },];
for (const p of products) { console.log(`${p.name}: ${p.price} جنيه`);}
const cheap = products.filter((p) => p.price < 50);console.log(cheap);قلم: 5 جنيهحقيبة: 120 جنيه[ { name: 'قلم', price: 5 } ]هنا اجتمع كل ما تعلمته: مصفوفات، وكائنات، وحلقات، ودوال سهمية، و filter.
استخراج الخصائص (Destructuring)
Section titled “استخراج الخصائص (Destructuring)”اختصار مفيد لأخذ عدة خصائص في متغيرات بسطر واحد:
const user = { username: "ahmed", level: 3 };const { username, level } = user;console.log(username, level);ahmed 3جرّب بنفسك
Section titled “جرّب بنفسك”كائن يمثل كتاباً تقرأه، وفيه دالة تحسب نسبة ما قرأته. غيّر عدد الصفحات المقروءة، وأضف خاصية author واطبعها:
الناتج
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان الفاصلة بين الخصائص: كل خاصية تنتهي بفاصلة قبل الخاصية التالية، وإلا يظهر خطأ.
- استخدام النقطة مع متغير: إذا كان اسم الخاصية في متغير
key، فإنobj.keyتبحث عن خاصية اسمها حرفياً «key». الصحيحobj[key]. - نسيان this داخل الدالة: كتابة
speed += 20بدلاً منthis.speed += 20لن تعدّل خاصية الكائن.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
إذا كان const p = { name: 'Sara', age: 13 }، فما قيمة p.city؟
قراءة خاصية غير موجودة لا تسبب خطأ، بل تعطي undefined.
سؤال
داخل دالة في كائن، إلى ماذا تشير الكلمة this؟
this داخل دالة الكائن تعني «هذا الكائن»، فتستطيع بها قراءة خصائصه وتعديلها.
الخلاصة
Section titled “الخلاصة”- الكائن مجموعة خصائص على شكل
مفتاح: قيمةبين{ }. - تقرأ الخاصية بـ
obj.keyأوobj["key"]، والخاصية غير الموجودة قيمتهاundefined. - يمكنك تعديل الخصائص وإضافتها وحذفها بـ
delete. - الدوال داخل الكائن تستخدم
thisللإشارة إلى الكائن نفسه. for...inوObject.keysللمرور على الخصائص، ومصفوفات الكائنات شكل شائع جداً.