سؤال

عملية مشتركة في JavaScript هي استبدال طريقة كائن مع واحدة جديدة بينما لا تزال تتصل بالطريقة الأصلية.غالبا ما يتم ذلك مثل هذا:

giveacodicetagpre.

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

giveacodicetagpre.

في هذه المرحلة، لا أستطيع أن أقرر الطريقة التي يجب استخدامها منذ أن أشعر بالمفاضلات لكل منها حولها.لذلك سؤالي هنا هو: أي من هذه الطريقة أفضل (أكثر طبيعية، أو مقبولة أو أسرع) أو هل هناك طريقة أخرى تتحسن على كل من هذه؟

هل كانت مفيدة؟

المحلول

هذا السؤال مشابه تماما، أو على الأقل يأتي إلى سؤال مماثل هنا: https://stackoverflow.com/Questions/660337 < / a>

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

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

نصائح أخرى

What you are trying to do is a JavaScript version of call super, which is described as a code smell by Martin Fowler.

I would suggest instead that you either

  1. Contain the "super" object instead of inheriting from it.
  2. Use template method, such as below

    templateMethod = function () {
         baseMethod();
         if (overrideMethod) {
              overrideMethod();
         }
    };
    

Other objects would call templateMethod. The overrideMethod is where child objects would have their code.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى softwareengineering.stackexchange
scroll top