المرجع reference فى javascript


السلام عليكم و رحمه الله تعالى و بركاته

قد يبدوا هذا الموضوع تافه بالنسبه للبعض ، لكنه مهم جدا و سيقودنا إلى مواضيع متقدمه جدا فى شرح ال OOP ، المرجع reference هو مؤشر pointer إلى كائن ما ، و يمكن لأكثر من مرجع أن يشيروا إلى كائن واحد ، و يمكن للمرجع أن يشير لمرجع اخر ، حتى تتضح الصوره أكثر لننظر لهذا المثال البسيط :

var arr = new Array(“keep”,”on”,”dev”);
var arr_reference = arr ;
alert ( arr.length === arr_reference.length ); // true🙂

فى المثال السابق قمت بإنشاء مصفوفه بإسم arr تحتوى على 3 عناصر ، ثم أنشات مرجع بإسم arr_reference حتى يشير إلى المصفوفه ، لاحظ ان المرجع يشير إلى الكائن النهائى “المصفوفه” ولا يشير إلى المتغير arr ، و عند مقارنه تساوى الخاصيه length فى كل من arr و arr_reference نجد أنها متساويه و ال alert يظهر لنا القيمه true لأنهم يشيروا إلى نفس الكائن النهائى ” المصفوفه التى تحتوى على تلات عناصر ” .

كما ذكرت المرجع يشير إلى الكائن النهائى ولا يشير إلى متغير ، حتى تفهم هذه القاعده جيدا لننظر لهذا المثال البسيط :

var arr = new Array(“keep”,”on”,”dev”);
var arr_reference = arr;
arr = new Array(“mostafa”,”farghaly”);
alert( arr === arr_reference); // false😦

فى المقال السابق أنشأت مصفوفه بإسم arr تحتوى على 3 عناصر ، ثم أنشأت مرجع بإسم arr_reference يشير إلى المصفوفه التى تحتوى على 3 عناصر ، ثم جعلت المتغير arr يشير إلى مصفوفه أخرى تحتوى على عنصرين ، و بما ان القاعده تنص على أن المرجع يشير إلى الكائن النهائى ولا يشير إلى المتغير فإن arr_reference لا يزال يشير إلى المصفوفه التى تحتوى على 3 عناصر ، لذلك عند مقارنه arr ب arr_reference النتيجه تكون false لأنهم يشيروا لكائنات مختلفه .

أخيرا حاله غريبه سوف تصادفها عند الإشاره إلى النصوص strings ، عند إضافه نص على نص موجود فإن النتيجه تكون نص جديد بدلا من نسخه معدله للنص السابق😯 ، حتى تفهم ذلك أنظر لهذا المثال البسيط :

var text = ” i love”;
var text_reference = text ;
text += “javascript” ; // text = “i love javascript”;
alert( text == text_reference); // false

فى المثال السابق أنشات نص بإسم text تحتوى على القيمه i love ، ثم أنشأت مرجع ليشير إلى الكائن النهائى من نوع string ، ثم شبكت النص javascript إلى النص i love و هذا ينتج عنه كائن جديد من نوع string و ليس نسخه معدله من النص الأصلى ، لذلك فإن المرجع text_reference يشير إلى i love ، اما ال text فيشير إلى الكائن الجديد i love javascript – كلنا بنحب جافاسكربت – و بمان ان القاعده تنص على ان المرجع يشير إلى الكائن النهائى و ليس المتغير ، فإن كل من text و text_reference يشيران إلى كائنين مختلفين و لا يتساويان عند المقارنه ، و ناتج المقارنه سيكون false .

موضوع ال reference ده محير شويه لكنه من أساسيات فهمك للجافاسكربت المتقدمه و هيكون معانا فى كل دروس OOP javascript ، طبعا انا لما قرأت عنه زمان مفهمتش أى حاجه ، قرأت اكتر من مره حتى فهمت ، الكلام كله موجود فى كتاب Apress : pro javascript techniques من صفحه 19 لغايه صفحه 21 .

الأوسمة:

5 تعليقات to “المرجع reference فى javascript”

  1. عمرو فهمي Says:

    السلام عليكم..

    لا أرى آي صعوبة فى الأمر..

    فانت عندما تقول أن x=1 ثم y=x فانت تعني أن y=1

    ومهما تغيرت قيمة x فان الy قد تم تعريف قيمتها ب 1 وانتهى الأمر
    عدل بعد ذلك كما تشاء على ال x وال y فلك منهما قيمته الخاصة به

  2. mostafa farghaly Says:

    الموضوع مش صعب ، عشان كده انا كتبت
    >>>”قد يبدوا هذا الموضوع تافه بالنسبه للبعض ، لكنه مهم جدا و سيقودنا إلى مواضيع متقدمه جدا فى شرح ال OOP “<<<<

  3. holooli Says:

    بارك الله فيك، بداية موفقة في كتاب من أقوى الكتب بالجافا شكربت. بانتظار البقية🙂

  4. أحمد سليمان Says:

    أنا أفهم أن الموضوع يتعلق بالأسبقية في التعريف و الإرجاع … هل هذا صحيح🙂

أضف تعليقاً

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s


%d مدونون معجبون بهذه: