اذهب إلى المحتوى

السؤال

نشر

في جافاسكريبت يمكن إضافة تابع إلى كائن من خلال this على النحو التالي:

function User () {
    this.save = function () {
        //do something
    };
};

أو إستخدام prototype للحصول على نفس النتيجة:

function User () { };

User.prototype.save = function () {
    //do something
};

هل يوجد فرق بين الطريقتين السابقتين؟

Recommended Posts

  • 1
نشر

بالطبع فإنه يوجد فرق، 

عملية الـنمذجة ترجمة عن 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 يمكنها التعامل مع متغيرات الكائن الداخلية الخاصة.

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

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...