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

السؤال

نشر

لدي كائن يحتوي على تابعين method1 وmethod2 وأريد أن أقوم بإستدعاء التابع method2 من داخل method1، لذلك كتبت الكود التالي:

var Obj = function(){
  // ...
}

Obj.prototype.method1 = function(){
  // ...
    method2();
  // ...
}

Obj.prototype.method2 = function(){
  console.log('execute method2');
}

var o = new Obj();
o.method1();

لكن المشكلة هي عندما أقوم بتنفيذ الكود السابق يظهر لي الخطأ التالي:

method2 is not defined

ما سبب الخطأ هنا؟ وكيف أستدعي التابع method2 من داخل method1 بطريقة صحيح؟

Recommended Posts

  • 1
نشر

سبب المشكلة لديك هو أن التابع method2 ليس دالة عامة global function وإنما هو تابع method ضمن الكائن Obj، وبتالي بإستدعائها، يجب أن تستخدم this، على النحو التالي:

const Obj = function(){
  // ...
}

Obj.prototype.method1 = function(){
  // في هذا الجزء نُشير إلى التابع method2
  // الموجود ضمن الكائن Obj
  // وبما أننا داخل تابع آخر ضمن نفس الكائن
  // فيجب أن نستخدم this للإشارة إلى الكائن الحالي
    this.method2();
}

// هنا نضيف التابع method2 إلى الكائن Obj
Obj.prototype.method2 = function(){
  console.log('execute method2');
}

const o = new Obj();
o.method1();

وستجد أن التابع method2 يتم إستدعائه بشكل سليم.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...