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

كيفية الحصول على كل أسماء التوابع Methods الموجودة في صنف Class ما في JavaScript؟

Emad Saif

السؤال

لدي صنف يحتوي على أكثر من تابع وخاصية:

class Foo {
  someFunc() {
    // ...
  }
  
  someFunc2() {
    // ...
  }
  
  someFunc3() {
    // ...
  }
}

كيف يمكنني الوصول إلى كل هذه التوابع في شكل حلقة For، بحيث يمكنني إستدعاء هذه التوابع أو طباعة أسمها؟

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

Recommended Posts

  • 1

يمكنك ذلك من خلال استخدام التابع Object.getOwnPropertyNames ثم نستطيع عمل ترشيح أو فلتر للناتج من خلال استخدام التابع filter لفلترة الدالة البانية الكونستركتر كالتالي

const instances = Object.getOwnPropertyNames(Foo.prototype)
    .filter(prop => prop != "constructor");
console.log(instanceOnly);

 

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

  • 1
  • الكائن يمكن أن يكون له methods خاصة، و أن يرث دوال من الصنف الأب له
  • نخزن أسماء الدوال في مصفوفة و نعمل الفلترة باستخدام typeof
// تعريف الدالة التي تقبل كائن لفحصها و إعادة أسماء دوالها
function getAllFuncs(myObj) {
  // تهيئة مصفوفة لحفظ أسماء الدوال
    const props = [];
  // حفظ الكائن مؤقتاً في متغير محلي 
    let obj = myObj;
  
  // الدوران على خصائص الدالة
    do {
        props.push(...Object.getOwnPropertyNames(obj)); // جلب الدوال للكائن الحالي
    } while (obj = Object.getPrototypeOf(obj)); // Prototype في حال وراثة يوجد دوال من الأب لذلك نجلبهم كم 
    
  
  // المرور على المصفوفة و فلترة النتائج
    return props.sort().filter((e, i, arr) => { 
      // غير مكرر و نوعه دالة
       if (e!=arr[i+1] && typeof myObj[e] == 'function') return true;
    });
}

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...