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

كيفية إستدعاء تابع method موجود في صنف class من خلال نص في JavaScript؟

Emad Saif

السؤال

لدي صنف class يحتوي على بعض التوابع methods، ولدي أيضًا دالة تُعيد اسم أحد هذه التوابع كـنص String، على النحو التالي:

class Person {
  getAll() {
    // ...
  }
}

function methodName() {
  // ...
  return "getAll"; 
}

const firstUser = new Person();

كيف يمكنني إستخدام ناتج الدالة methodName لإستدعاء تابع موجود في الصنف Person في JavaScript؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يوجد أكثر من طريقة للقيام بهذا الأمر، وأسهل طريقة هي إستخدام طريقة الأقواس للوصول إلى التابع، كما يلي:

firstUser["getAll"];	// access the method
firstUser["getAll"]();	// call the method

وبالتالي يمكننا إستخدام ما يرجعه التابع methodName مكان النص في المثال السابق:

firstUser[methodName()];	// access the method
firstUser[methodName()]();	// call the method

أيضًا توجد طريقة أخرى عبر إستخدام الدالة eval:

eval("firstUser." + methodName() + "()");

لكن لا يُفضل إستخدام هذه الطريقة لأنها قد تؤدي إلى وجود ثغرة XSS والتي تسمح للمهاجم بتنفيذ أكواد JavaScript ضارة بالمستخدم بغرض سرقة البيانات أو التخريب بشكل عام.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

يمكنك تعريف هاته الدالة ضمن كائن الوثيقة window ثم اعادة استدعاءها، يكون ذلك بشكل ديناميكي كـ: 

class Person {
  getAll() {
    console.log('called')
  }
}

function methodName() {
  // ...
  return "getAll"; 
}

const firstUser = new Person();

window['target'] = new Function('firstUser.'+methodName()+'()')

target(); // called

نستعمل في هذا الكائن Function لإنشاء دالة جديدة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...