JS / الكائنات

الكائنات

مفهوم الكائن

الكائن (Object) عبارة عن نوع يمكنه إمتلاك خصائص و دوال خاص به.
في عالم البرمجة، نستخدم الكائنات عند الحاجة لتخزين أو نقل مجموعة من البيانات معاً بشكل مرتب.

JS - الكائنات


أي شيء يملك عدة معلومات يمكنك تخزينها له في كائن واحد حتى لا تضطر إلى تخزين كل معلومة منها في متغير لوحدها.

في هذا الدرس ستتعلم كيفية إنشاء كائنات و التعامل معها خطوة خطوة.

طريقة تعريف كائن

الكائن يتم تعريفه بواسطة الرمزين { }.
كل خاصية في الكائن تملك إسم و قيمة، حيث يتم ذكر إسم الخاصية ويليها الرمز : و يليها القيمة.

objectName = {
propertyName1: value1,
propertyName2: value2,
...
};

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


الوصول لخصائص الكائن

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

1- يمكنك وضع نقطة بعد إسم الكائن و يليها إسم الخاصية كما يلي.

objectName.propertyName

2- يمكنك وضع إسم الخاصية بين [ ] كما يلي.

objectName['propertyName']

أغلب المبرمجين يفضلون الطريقة الأولى لأنها أبسط.
الطريقة الثانية تحتاجها حصراً إذا كان إسم الخاصية عبارة عن نص يتألف من أكثر من كلمة.


في المثال التالي قمنا بتعريف كائن وضعنا فيه 3 خصائص مع إعطاء كل خاصية منهم قيمة.
بعدها قمنا بطباعة قيم جميع الخصائص التي يملكها الكائن.

المثال الأول

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// وضعنا فيه ثلاث خصائص person هنا قمنا بتعريف كائن إسمه
let person = {
    id: 1024,
    username: 'AhmedAl-Atris',
    isWorking: true
};

// person هنا قمنا بطباعة قيم جميع الخصائص التي يملكها الكائن
document.write('id = ' + person.id + '<br>');
document.write('username = ' + person.username + '<br>');
document.write('isWorking = ' + person.isWorking);
        </script>
    </body>
</html>

في المثال التالي قمنا بتعريف كائن وضعنا فيه 4 خصائص مع إعطاء كل خاصية منهم قيمة.
بعدها قمنا بطباعة قيم جميع الخصائص التي يملكها الكائن.

المثال الثاني

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// وضعنا فيه أربع خصائص book هنا قمنا بتعريف كائن إسمه
let book = {
    author: 'AhmedAl-Atris codafox.blogspot.com',
    title: 'Learn Javascript For Beginners',
    totalPages: 340,
    'publication date': '6 August 2024'
};

// book هنا قمنا بطباعة قيم جميع الخصائص التي يملكها الكائن
document.write('author = ' + book.id + '<br>');
document.write('title = ' + book.title + '<br>');
document.write('totalPages = ' + book.totalPages + '<br>');
document.write('publication date = ' + book['publication date']);
        </script>
    </body>
</html>

طريقة تعريف دالة في الكائن

يمكنك جعل الكائن يملك دوال خاصة به من خلال تمرير الدوال كقيم للخصائص.
لتعريف دالة في الكائن عليك جعل الخاصية تساوي الدالة التي سيتم تعريفها و تكون بلا إسم ( Anonymous Function و عندها يصبح بإمكانك استدعاء هذه الخاصية لاحقاً من خلال إسم الخاصية نفسها.

عند استدعاء دالة من الكائن لا تنسى وضع () بعد كتابة إسمها حتى يفهم مفسّر جافاسكربت أنك تريد تنفيذها.


في المثال التالي قمنا بإنشاء كائن إسمه rectangle يمثل مستطيل وضعنا فيه ما يلي:

  • خاصية عادية إسمها description فيها نص عبارة عن وصف للمستطيل.
  • دالة إسمها getPerimeter() نمرر لها عددين عند استدعائها يمثلان الطول و العرض فترجع لنا محيط المستطيل.

بعدها قمنا بعرض قيمة الخاصية description و ما سترجعه الدالة getPerimeter().

مثال

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// وضعنا فيه خاصية عادية و دالة rectangle هنا قمنا بتعريف كائن إسمه
let rectangle = {
    description: 'A rectangle is a quadrilateral with four right angles<br>',
    getPerimeter: function(length, width) {
        return length * width;
    }
};

// rectangle التي يملكها الكائن description هنا قمنا بطباعة قيمة الخاصية 
document.write('Rectangle description = ' + rectangle.description);

// rectangle التي يملكها الكائن getPerimeter هنا قمنا بطباعة القيمة التي ترجعها الدالة 
document.write('Rectangle getPerimeter = ' + rectangle.getPerimeter(4, 6));
        </script>
    </body>
</html>

طريقة تعريف كائن بداخل الكائن

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

في المثال التالي قمنا بإنشاء كائن إسمه user و بداخله كائن آخر إسمه job و من ثم قمنا بعرض القيم الموجودة فيهما.

مثال

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// وضعنا فيه خصائص person هنا قمنا بتعريف كائن إسمه
let person = {
    id: 1024,
    username: 'AhmedAl-Atris',
    job: {
        title: 'Programmer',
        experienceYears: 3
    }
};

// person هنا قمنا بطباعة قيم جميع الخصائص التي يملكها الكائن
document.write('username = ' + person.username + '<br>');
document.write('job.title = ' + person.job.title);
        </script>
    </body>
</html>

الكلمة المفتاحية this

الكلمة this تمثل الكائن نفسه الموجودة فيه.
يمكن استخدامها في الدوال الموضوعة في الكائن للوصول لخصائص الكائن نفسه.

في المثال التالي قمنا بتعريف كائن إسمه user وضعنا فيه ما يلي:

  • خاصية إسمها firstName تحتوي على إسم المستخدم.
  • خاصية إسمها lastName تحتوي على إسم عائلة المستخدم.
  • دالة إسمها fullName() ترجع نص عبارة عن إسم المستخدم و إسم عائلته.

مثال

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// وضعنا فيه 3 خصائص user هنا قمنا بتعريف كائن إسمه
// عبارة عن دالة ترجع إسم المستخدم fullName الخاصية
let user = {
    firstName: 'AhmedAl-Atris',
    lastName: 'codafox.blogspot.com',
    fullName: function() {
        return this.firstName + ' ' + this.lastName;
    }
};

document.write('fullName = ' + user.fullName());
        </script>
    </body>
</html>

الكلمة this و الكائن Window

أي صفحة ويب تتصفحها تكون مرتبطة بشكل تلقائي بكائن إسمه Window يملك الكثير من المعلومات و الدوال التي يمكنك الإستفادة منها.

في هذا الدرس لن نتطرق لخصائص و دوال الكائن Window فهذا الموضوع كبير جداً و سنتعرف عليه بشكل مفصل في دروس لاحقة. و لكن ما نود الإشارة إليه أنه في حال استخدام الكلمة this لوحدها بدون استخدامها في الكائن فإنها ستمثل الكائن Window الذي يمثل الصفحة نفسها.


في المثال التالي قمنا بطابعة الكلمة this لوحدها لتلاحظ كيف أنه سيتم طباعة [object Window] مما يعني أن هذه الكلمة تمثل الكائن الخاص بالصفحة.

المثال الأول

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// تمثل الكائن الخاص بالصفحة this بمعنى أن [object Window] ستطبع
document.write(this);
        </script>
    </body>
</html>

في المثال التالي قمنا بعرض مسار الصفحة الموجود في الكائن الذي يمثل الصفحة في الخاصية window.location.href و الذي يمكننا الوصول إليه على النحو التالي this.location.href أيضاً.

المثال الثاني

خد الكواد نسخ واضغط هنا جرب الكود 📋
<!DOCTYPE html>
<html>
    <body>
        <script>
// window.location.href ستطبع رابط الصفحة المخزن في الخاصية
document.write(this.location.href);
        </script>
    </body>
</html>

إرسال تعليق

أحدث أقدم

نموذج الاتصال