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

كيفية إضافة أكثر من تابع باني constructor في صنف class واحد في JavaScript؟

Emad Saif

السؤال

في بعض اللغات مثل Dart يمكن عمل أكثر من تابع باني constructor في نفس الصنف Class بحيث يتم تغير سلوك الكائن المنشأ من الصنف نوعًا ما عند إستعمال تابع باني مختلف.

هل يمكن تطبيق نفس الفكرة في JavaScript بحيث يكون هناك أكثر من تابع باني في نفس الصنف؟

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

Recommended Posts

  • 1

الجافا سكريبت لا تدعم الـ function overloading أي أنه لا يمكن تعريف أكثر من وظيفة بنفس الاسم ولكن بـ parameters مختلفة وهذا يتضمن الـ constructor كذلك.

ولكن يمكنك التغلب على هذه المشكلة بعدة طرق منها إنشاء وظائف static لبناء العناصر مثل التالي: 

 class MyClass {
        constructor(a,b,c,d){
            this.a = a
            this.b = b
            this.c = c
            this.d = d
        }
        static BAndCInstance(b,c){
            return new MyClass(null,b,c)
        }
        static BAndDInstance(b,d){
            return new MyClass(null,b, null,d)
        }
    }
//Instance that has just a
const myclass=new MyClass(a)
//Instance that has b and c params
const instanceWithBAndC = MyClass.BAndCInstance(b,c)
//Instance that has b and d
const instanceWithBAndD = MyClass.BAndDInstance(b,d)

أو يمكنت التحقق من ال parameters  من داخل الـ constructor و تعديل البيانات تبعاً لذلك: 

class MyClass {
        constructor(a,b){
            if (a===undefined)
            a= 'how are you';
            if (typeof(b)==='string')
            this._constructInSomeWay(a, b);
       }
       _constructInSomeWay(a,b){
            console.log({a,b})
            // do some thing
        }
        
    } 

ويمكن هنا إضافة العدد الذي تريده من الـ constructor حسب نوع المعلومات القادمة.

اقرأ أيضاً : 

 

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

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...