سؤال

أقوم ببناء مكتبة (https://github.com/oscargodson/storagelocker) ، غلاف محلي ليكون أكثر دقة ، ولكن لأن هذه هي المحاولة الأولى لي في oo javaScript ما زلت أتعلمها ولدي بعض الأسئلة.

  1. لقد رأيت في المكتبات الأخرى أنهم في بعض الأحيان يلفونها في وظيفة مجهولة. هل أنا ، أم يجب أن أفعل ذلك مع هذا؟ وإذا كان الأمر كذلك ، كيف دون كسر أي شيء؟

  2. لواجهة برمجة التطبيقات الداخلية (في الأساس ، الوظائف الداخلية) كيف يجب أن أكتبها؟ يجب إضافتها إلى الكائن الرئيسي على سبيل المثال storageLocker.prototype.myInternalFunction() أو فقط myInternalFunction() عشوائيا في السيناريو الخاص بي؟ لم أكن أرغب في أن تكون الوظائف عالمية على الرغم من ذلك ... واحدة من الوظائف على سبيل المثال ، تتحقق فقط من مجموعة من العناصر في JSON ، وترى ما إذا كانت كائناتها ، ثم تتحقق من نوع الكائن (مثل Date()) ثم يحولها.

  3. كيف/أين يجب أن أضيف عالميًا ، إلى البرنامج النصي الخاص بي ، اسكواش؟ على سبيل المثال لدي var دعا patterns هذا شيء مثل var patterns = {"date":/\/Date\(([0-9]+)\)\//} كيف يمكنني إضافة ذلك إلى البرنامج النصي الخاص بي؟

شكرًا جزيلاً. أريد أن أكتب السيناريو الخاص بي طريق صحيح لذلك أنا أسألكم يا رفاق. لا أعرف أي شباب JS محليًا يقومون بأي شيء ، إنهم جميعهم أنواع المدارس القديمة ...

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

المحلول

http://nefariousdesigns.co.uk/archive/2010/10/object-oriented-javascript-follow-part-2-technical/

لديه قسم لائق حول تسليم الأسماء يستحق القراءة.

http://yuiblog.com/blog/2007/06/12/module-patern/

هو أيضا نظرة عامة جيدة أخرى.

لمزيد من المواد الرائعة حول ممارسات JavaScript الجيدة ، تحقق من

http://javascript.crockford.com/

بعد مناقشتنا في التعليقات ، قمت بتغيير المثال على هذا:

var storageLocker = function (selector) {

    var _selector = selector || "default value";

    function myPrivateFunction() {

    }

    var public = {

        get: function () {
            return _selector;
        },

        uppercase : function () {
            _selector = _selector.toUpperCase()
            return this;
        }

    }
    return public;

};

// use:
var test = storageLocker("search for this").uppercase().get();;

alert(test);

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

يمكن أن تكون هناك طرق أفضل أخرى للقيام بذلك من خلال العودة storageLocker اعتراض نفسه ، لكن ذلك يتطلب تفكيرًا أكثر قليلاً.

نصائح أخرى

أريد أن أقول:

1) الغرض من هذه التقنية ليس تلوث مساحة الاسم العالمية. هذا أمر جيد. في المثال أدناه ، يمكنك أن ترى أن كل تفاعلك مع المكتبة هو عبر كائن واحد mylibrary. API العامة هي قيمة إرجاع الوظيفة المجهولة.

var MyLibrary = function() {
// private
   this.InternalVariable = 'some value';

   function internalFunction(x,y) {
      return x + y;
      }

     function getInternalVariable() {
    return this.InternalVariable;
}
// public
   return {
      publicVariable : '1.0',
      publicFunction : function(x,y) {
         return x + y
         },
 accessInternalVariable : function() {

     return getInternalVariable();
     }
      }
   }();

2) انظر أيضًا المثال أعلاه على كيفية وضع وظائف "الداخلية" الخاصة بك

3) إذا كنت متغيرًا عالميًا هو نوع من خيار التكوين ، فسأقوم فقط بإنشاء Setter/getter العامة وأبقي المتغير "خاص"

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