JavaScript: الكائنات في جافاسكريبت
آخر تحديث: 2026-10-13
الكائنات هي أهم بنية بيانات في جافاسكريبت. فكّر فيها كـ بطاقات معلومات — الأمامية تقول "الاسم: سارة" والخلفية تقول "العمر: 20". كل قطعة معلومات لها مفتاح وقيمة، يشكلان زوج مفتاح-قيمة.
1. إنشاء الكائنات الحرفية
استخدم الأقواس المقوسة {} لكتابة كائن مباشرة — هذا هو الأسلوب الأكثر شيوعًا:
<script>
const student = {
name: "سارة",
age: 20,
major: "علوم الحاسب"
};
console.log(student);
</script>
أزواج المفتاح-قيمة مفصولة بنقطتين، والأزواج مفصولة بفواصل. الفاصلة الأخيرة بعد الزوج الأخير مسموح بها (ومريحة للإضافات المستقبلية).
طريقتان للوصول إلى خصائص الكائن:
| الطريقة | البناء | متى تستخدم |
|---|---|---|
| بنية النقطة | obj.name |
عندما يكون اسم الخاصية مُعرّفًا صالحًا |
| بنية الأقواس | obj["name"] |
عندما يحتوي الاسم على أحرف خاصة أو مخزن في متغير |
أكبر ميزة لبنية الأقواس: يمكنك استخدام متغير كمفتاح.
<script>
const key = "name";
console.log(student[key]); // مثل student["name"]
</script>
2. تعديل وإضافة الخصائص
بعد إنشاء كائن، يمكنك تعديل الخصائص الحالية أو إضافة جديدة في أي وقت — حتى لو تم إعلان الكائن بـ const (const يُقفل المرجع، وليس المحتوى).
<script>
student.age = 21; // تعديل
student.grade = "سنة ثالثة"; // إضافة خاصية جديدة
console.log(student);
</script>
3. حذف الخصائص
استخدم عامل delete لإزالة خاصية بالكامل:
<script>
delete student.grade;
console.log(student);
</script>
بعد الحذف، الوصول إلى تلك الخاصية يُرجع undefined.
4. الأساليب
الدالة داخل كائن تسمى أسلوب. عندما تصبح الدالة قيمة خاصية، يمكن للكائن "فعل أشياء":
<script>
const dog = {
name: "ريكس",
bark() {
return "نباح! أنا " + this.name;
}
};
console.log(dog.bark());
</script>
5. كلمة this
this تشير إلى "الكائن الحالي" — whoever يستدعي الأسلوب، this هو ذلك الكائن. هذا أحد أكثر مفاهيم جافاسكريبت صعوبة: إذا تم استخراج أسلوب واستدعائه بشكل منفصل، this لا تشير إلى الكائن الأصلي.
<script>
const bark = dog.bark;
console.log(bark()); // this لا تشير إلى dog بعد الآن — قد تكون window أو undefined
</script>
6. المنشئات
عندما تحتاج لإنشاء كائنات متعددة بنفس الهيكل بشكل جماعي، استخدم دالة المنشئ:
<script>
function Person(name, age) {
this.name = name;
this.age = age;
this.sayHi = function() {
return "مرحبا، أنا " + this.name;
};
}
const p1 = new Person("أحمد", 25);
const p2 = new Person("محمد", 30);
console.log(p1.sayHi());
console.log(p2.sayHi());
</script>
new تفعل ثلاثة أشياء: تُنشئ كائنًا فارغًا ← تُعيّن this لت pointing إليه ← تُرجع الكائن.
7. Object.keys / values / entries
هذه الطرق الثلاثة الثابتة تُرجع مصفوفات بمفاتيح الكائن وقيمه وأزواج المفتاح-قيمة:
| الطريقة | الإرجاع |
|---|---|
Object.keys(obj) |
["name", "age"] |
Object.values(obj) |
["سارة", 20] |
Object.entries(obj) |
[["name","سارة"], ["age",20]] |
مفيدة للغاية لتكرار الكائنات: Object.keys(obj).forEach(key => ...).
▶ مثال: إنشاء كائن طالب وعرض المعلومات
▶ جرّب الكود▶ مثال: بنية النقطة مقابل بنية الأقواس
▶ جرّب الكود▶ مثال: إضافة وتعديل وحذف الخصائص ديناميكيًا
▶ جرّب الكود▶ مثال: المنشئات وObject.keys/values/entries
▶ جرّب الكود8. إنشاء الكائنات والتعامل معها
- الكائنات هي أزواج مفتاح-قيمة، تُنشأ ببناء
{} - بنية النقطة
obj.nameلأنظف; بنية الأقواسobj["name"]للمفاتيح الديناميكية constيُقفل مرجع الكائن، وليس المحتوى — يمكنك تعديل الخصائص بحرية- الأساليب هي دوال داخل كائنات;
thisتشير إلى الكائن الحالي - المنشئات تُنشئ كائنات متعددة بنفس الهيكل;
newيُنشئ كائنًا ويربطthis Object.keys/values/entriesتُرجع مصفوفات بالمفاتيح والقيم والأزواج — مثالية للتكرار
❓ أسئلة شائعة
const؟const يُقفل مرجع المتغير (يعني أنه يشير دائمًا إلى نفس الكائن)، وليس محتوى الكائن. يمكنك إضافة وتعديل وحذف الخصائص بحرية — لكن لا يمكنك إعادة التعيين بـ obj = {}."home-city")، أو عندما يكون الاسم مخزنًا في متغير للوصول الديناميكي، يجب استخدام الأقواس. لكل شيء آخر، بنية النقطة أنظف ومفضلة.new مع منشئ؟this سيشير إلى الكائن العالمي (أو undefined في الوضع الصارم)، مما يتسبب في هبوط الخصائص في مكان خاطئ أو إلقاء خطأ. هذا فخ كلاسيكي — بنية class في ES6 تتعامل مع هذا تلقائيًا.📖 ملخص
- تُنشأ الكائنات بـ
{}، تخزن البيانات كأزواج مفتاح-قيمة، ويتم الوصول إليها بترميز النقطة أو الأقواس - ترميز الأقواس للمفاتيح الديناميكية والأحرف الخاصة؛ ترميز النقطة أبسط ويفضل استخدامه
- الدوال داخل الكائنات تصل إلى الخصائص عبر
this، الذي يعتمد قيمته على سياق الاستدعاء - دوال البناء مع
newتنشئ كائنات متعددة بنفس الهيكل Object.keys/values/entriesللتكرار على المفاتيح والقيم وأزواج المفتاح-القيمة
📝 تمارين
- أنشئ كائن
bookبخصائصtitleوauthorوyear، بالإضافة إلى أسلوبgetSummary()يُرجع نصًا مثل"title بقلم author، نُشر في year". - اكتب منشئ
Car(brand, model, year)، استخدمه لإنشاء 3 سيارات، ثم استخدمObject.keysلسرد جميع أسماء خصائص سيارة واحدة. - أضف أسلوب
drive()ديناميكيًا إلى أي من السيارات أعلاه (يُرجع"brand model يقود")، ثم استدعِه. لاحظ كيفthisتشير إلى الكائن الحالي داخل الأسلوب.