Emad Saif نشر 1 يونيو 2022 أرسل تقرير نشر 1 يونيو 2022 في جافاسكريبت يمكن إضافة تابع إلى كائن من خلال this على النحو التالي: function User () { this.save = function () { //do something }; }; أو إستخدام prototype للحصول على نفس النتيجة: function User () { }; User.prototype.save = function () { //do something }; هل يوجد فرق بين الطريقتين السابقتين؟ 1 اقتباس
1 Adnane Kadri نشر 1 يونيو 2022 أرسل تقرير نشر 1 يونيو 2022 بالطبع فإنه يوجد فرق، عملية الـنمذجة ترجمة عن prototyping في هي نمط تصميم يخص إنشاء الكائنات Objects يندرج تحت الفئة creational design patterns أو انماط التصميم الإنشائية. وفي جافاسكربت وهو ببساطة أشبه بالاشارة الى النموذج الأولي للكائن وهو ما كالتالي: function User () { }; User.prototype.save = function () { //do something }; فهاهنا نحن نقوم بتهيئة طريقة او تابع او وظيفة للصنف User يستعمله هو نفسه كامل الكائنات المنشئة عن طريق User وليكن الكائنين Ali و Ossama. وذلك لأن كل كائن مرتبط بكائن النموذج الأولي (لنتخيله كالقالب الأولي). في حين ان استعمال this سيشير الى الكائن المنشَئ وليس للصنف، بمعنى انه سيشير الى Ali وحده والى Ossama وحده. فكل كائن منهما سيمتلك نسخته الخاصة من save. تعتبر الطريقة الأولى أو النمذجة أسرع نسبيا وأقل استعمالا للذاكرة (لأن التابع سيكون متوفرا عند كل النسخ عن الصنف عند استعمال this في حين انه سيكون متوفرا في النموذج الاولي فقط في حالة استعمال prototype) أما الطريقة الثانية فهي تخدم مفهوم التغليف Encapsulation أكثر فالتوابع المعرفة داخل الكائن بالاشارة بـ this يمكنها التعامل مع متغيرات الكائن الداخلية الخاصة. في الحقيقة لا يوجد هذان النمطين فقط في جافاسكربت فيما يخص الكائنات، يوجد أنماط عديدة أخرى يتعلق بعضها بتهئية الكائنات وإنشاءها، بأشكالها وكيفية عملها، بسلوكها وكيفية تواصلها وغيرها. 1 اقتباس
السؤال
Emad Saif
في جافاسكريبت يمكن إضافة تابع إلى كائن من خلال this على النحو التالي:
أو إستخدام prototype للحصول على نفس النتيجة:
هل يوجد فرق بين الطريقتين السابقتين؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.