كيف يمكنك الاستفادة من الإرث نموذجي دون الحاجة إلى تضمين الملفات في ترتيب معين؟

StackOverflow https://stackoverflow.com/questions/279391

  •  07-07-2019
  •  | 
  •  

سؤال

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

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

parent_class.js

var Namespace = Namespace || {};    

Namespace.Parent = function () { };
Namespace.Parent.prototype.doStuff = function () { ... };

child_class.js

var NameSpace = Namespace || {};

Namespace.Child = function () { ... };
Namespace.Child.prototype = new Namespace.Parent();

والطريقة الوحيدة يعمل هذا هو إذا تم تضمين parent_class.js قبل child_class.js، والتي قد لا يحدث إذا كان البرنامج النصي سلسلة يضع رمز الطفل قبل رمز الأم.

هل هناك طريقة لكتابة هذا الرمز حتى أن وظيفة هو نفسه، ولكن الترتيب الذي يتم كتابة كود الأمور لم تعد؟

تحرير: لقد نسيت أن أنا باستخدام النطاقات كذلك، لذلك أضفت أن إلى رمز أيضا، التي قد تغيير الأمور قليلا

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

المحلول

<اقتباس فقرة>   

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

هل من السهل جدا حل لإلحاقها قيمة ترتيب لكل اسم الملف، ونوع بالاسم قبل تنفيذ العملية؟

وعلى سبيل المثال:

01_parent.js
02_child.js

وعلى خلاف ذلك، ربما الحفاظ على لائحة التقدم بطلب مسبق من الملفات في ملف منفصل. ربما حتى يخطو خطوة إضافية وتوفير بنية التبعية الهرمي في XML لتحليل؟ قد يكون هذا هو الحل ل:-D بت هندسة على

وبعض الخيارات عن سبل للتعامل مع المشكلة إذا كان لديك أي وسيلة لتحديد كيفية كتابة ملفات جافا سكريبت.

نصائح أخرى

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

وRequireJS يأتي مع أداة من شأنها أن تجمع وتقليل جافا كل ما تبذلونه من وحدات للانتشار إنتاج كذلك.

وأفترض أنك يمكن أن تفعل شيئا hackish حقا مثل هذا:

setTimeout(function() { 
  if(typeof(Parent) != "undefined" && typeof(Child) != "undefined") { 
    Child.prototype = new Parent(); 
  } else {
    setTimeout(arguments.callee, 50);
  }
}, 50);

ويمكن أيضا أن يكون هذا كود في أي مكان، وسوف تعمل باستمرار حتى تم تحميل كل من Parent وChild ... ولكن لم أكن لأفعل ذلك.

وأنا شخصيا فقط للتأكد من يتم الجمع بين الملفات في الترتيب الصحيح.

إذا هي "namespaced" الكائنات فإنك إما أن التحول إلى حل بناء يتضمن سلسلة في أمر أو استخدام شيء من هذا القبيل <لأ href = "http://dojotoolkit.org/book/dojo-book-0 -9 / جزء-3-برنامجي-dijit و-دوجو / وحدات، وبمساحات / ما-لا-دوجو-املتطلبات "يختلط =" نوفولو noreferrer "> dojo.require (ولكن من الواضح أن لا دوجو محددة ). في الأساس كنت ترغب في الإطار من شأنها أن توفر لك القدرة للتحقق مما إذا معرف معين هو متاح وتنفيذ وقفة وإدراجه (عبر اياكس evaled أو علامة النصي إدخالها) إذا لم يكن.

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