Each of call, apply and bind methods in JavaScript are pretty similar, but there is a slight difference between them. If you knew one of them, it would be easy to know the other two. Let's begin with the call method. What is the call method and what is its importance?
Call Method
The call method is a pre-defined method in JavaScript, and it belongs to Function object pro
بداية لكي نتعرف على نمط الـ MVVM ونتشبع بفهمه، علينا أن ننظر إليه في سياق عائلة الـ MV، فلابد لنا أن نتعرف على كل من نمط الـ MVC ونمط الـ MVP لكي نفهم بشكل دقيق هذا النمط، وقد تحدثنا عن كل من النمطين بشكل مفصل، وانصحكم بالاطلاع على هذه الموضوعات إن لم تكونوا على علم بهذه الأنمطة. والآن ما هو نمط الـ MVVM ؟ الـ MVVM هو اختصار لـ Model View ViewModel، وهذا النمط عبارة عن ثلاث وحد
لكي تتعرف على هذا النمط بطريقة صحيحة لابد أن تتعرف أولا على نمط الـ MVC حيث أن الـ MVP يعد أحد أفراد عائلة الـ MV والـ MVC يعتبر أول فرد في هذه العائلة، ومعظم الأفراد الذين انضموا إلى هذه العائلة يأخذون الكثير من الصفات والوظائف من الـ MVC ولذلك انصحكم بقراءة موضوع "الـ MVC pattern في الجافاسكربت" قبل تناول هذا الموضوع.
Separation Of Concerns
دعونا في البداية ن
اعتقد أن معظمنا قد مر على مصطلح الـ MVC من قبل ولديه معرفة مسبقة بهذا المصطلح لكن دعونا نتناقش فيما بيننا حول هذا الموضوع من البداية، فأول شيء نريد أن نعرفه؛ إلى أي شيء يشير هذا الاختصار MVC ؟! هذا الاختصار يشير إلى ثلاث كلمات Model-View-Controller والـ MVC هذا عبارة عن نمط من أنماط كتابة الأكواد، وهو نمط هيكلي أكثر منه وظيفي، بمعنى أنه يساعدنا على هيكلة السكربت أو الكود الذي ن
في البداية نمط الـ PubSub هو اختصار للـ publish subscribe pattern وربما تجد له بعض الأسامي الأخرى، لكن في النهاية مهما كانت المسميات الفكرة واحدة ومحددة ومعروفة. قبل الدخول في تفاصيل هذا النمط علينا أولا أن نتحدث عن المشكلة التي جاء من أجلها هذا النمط ليساعدنا على حلها.
هناك بعض الأنماط والمصطلحات التي بمجرد أن تسمعها عليك أن تضع عينيك على مشكلة ما، فعندما تسمع مثلا نمط الـ Pu
نمط الـ singleton في الجافاسكربت، يعد من الأنماط الجميلة جدا، وفي بعض الأحيان لا يمكن الاستغناء عنه، فهو نمط له فوائد كثيرة جدا برغم أن عملية تنفيذه عملية سهلة للغاية. فما هو الـ singleton pattern ؟ الـ singleton pattern هو نمط يوفر لنا عملية التأكد من أن الفصيل أو الـ "class" لديه نسخة "instance" واحدة فقط لا أكثر، وهذه النسخة يمكن الوصول لها بشكل globally
في البداية، ما معنى كلمة module؟ بكل بساطة الـ module هو كل وحدة من وحدات أي تركيب، وفي عالم السوفتوير؛ الـ module هو عبارة عن جزء من أجزاء البرنامج، فالبرنامج إما أن يتكون من module واحد أو عدة modules، وعندما نقوم بتجميع الـ modules المختلفة مع بعضها نستطيع في النهاية أن ننشئ software أو نظام قوي للغاية، وقابل للتطوير والصيانة بكل سهولة. قبل أن نتحدث عن كون الـ module مجرد نم
اتذكر أنني في بداية تعلمي الجافاسكربت، كلما مررت بكلمة الـ prototype أو الـ __proto__ كنت اتجاهل الموضوع أو ابتعدت عنه، اتذكر وقتها أن كلمة مثل الـ prototype أو الـ __proto__ كانت مثل الطلامس والمتاهات بالنسبة لي، وكنت أظن أنني لست بحاجة إلى فهم ماهية الـ prototype هذا، وكنت كثيرا أقول سوف افهم الـ prototype والـ __proto__ في وقت لاحق، ولا اعرف لماذا تجاهلت تعلم وفهم الـ protot
عندما نتحدث عن الكائن الـ object في الجافاسكربت، فنحن نتحدث عن ركن ركيز من أركان الجافاسكربت، فنحن نعرف أن معظم الأشياء في الجافاسكربت هي بالأساس الأول عبارة عن object، فالدوال والمصفوفات والتواريخ ومعظم الأشياء في الجافاسكربت تعتبر وليدة للـ object، ولذلك أقول أن الـ object يعد ركن ركيز من أركان الجافاسكربت.
في هذا الموضوع سوف نتحدث بشكل عام عن بعض الطرق الشائعة للتعامل مع ال
كل من الدالة call ودالة apply ودالة bind في الجافاسكربت متشابهون إلى حد كبير، والفروقات بينهم صغيرة، ولو تعرفت على أي منهم تستطيع بسهولة أن تتعرف على الدالتين الأخرتين، دعونا في البداية نبدأ بالدالة call، ما هي الدالة call وما هي وظيفتها؟
Call Function
الدالة call هي دالة معرفة مسبقا في لغة الجافاسكربت، وهي دالة تتبع الكائن Function وبالتالي أي دالة تقوم بتعريفها تأخذ كل خصائص
تحدثنا باستفاضة عن كل من الـ classical inheritance و الـ prototypal inheritance، وقلنا أن كل من النوعين يندرجان تحت عملية الـ delegation عن طريق استخدام سلسلة الـ prototype. فماذا عن استخدام الـ Mixins في الوراثة؟
هناك بعض التحديات التي تجعلنا نفكر في استخدام منهج أخر في عملية الوراثة، أولى هذه التحديات هي؛ كيف يمكن لنا أن نجعل فصيل ما أو كائن ما يرث من أكثر من أب في آن واحد
بعدما تحدثنا بشكل مفصل عن كل من الـ classical inheritance والـ prototypal inheritance في الجافاسكربت، الآن يأتي دور الحديث عن الفرق بين كل منهما. قلنا سابقا أن كل منهما يعتمد على سلسلة الـ prototpe والاختلاف الجوهري يكمن في تركيبة وشكل هذه السلسلة، وبالتالي إذا علمت شكل سلسلة الـ prototype في كل من النوعين بشكل دقيق، تستطيع بكل سهولة أن تستخرج مميزات وعيوب كل منها، وفي أي الحال
تحدثنا في موضوع سابق عن البرمجة الكائنية التوجيه الـ "oop" في الجافاسكربت، وتحدثنا عن المفهوم وأهميته بشكل مفصل، وتناولنا موضوع الـ classes ودورها في الـ object oriented programming، والآن يأتي السؤال الأهم؛ كيف نطبق ونستفيد من هذا المفهوم في الجافاسكربت ؟ أولى الخطوات لكي نحقق هذا المفهوم ونطبقه؛ هي إنشاء فصائل "classes" ومن ثم عمل "instantiation"
قبل الحديث عن أي شيء يخص الجافاسكربت في هذا الصدد، علينا أولا أن نتحدث عن المفهوم بشكل عام، الـ object oriented مفهوم أو نظرية أو فكرة يمكن تطبيقها في أي لغة برمجة، هي ليست معنية بلغة واحدة عن باقي اللغات. الـ object oriented programming تعني باللغة العربية البرمجة الكائنية التوجيه، وهناك من يطلق عليها برمجة الكائنات الموجهة، وغالبا ما يُشار إليها بالـ oop، فما هي البرمجة
قبل أن نتحدث عن أي شيء يخص الـ design patterns دعونا في البداية نحكي قصة رمزية نبدأ بها موضوعنا. كانت لدينا قطعة أرض نريد أن نبني عليها عمارة سكنية، فقمنا بمخاطبة بعض المهندسين المعماريين الاكفاء لكي يرسموا لنا تصميم هذه العمارة. هؤلاء المهندسون مختلفون تماما من حيث الجامعات التي درسوا بها، والشركات التي عملوا بها، وكل منهم لا يعرف الأخر. وطلبنا من كل مهندس على حدة أن ينشئ لنا