سؤال

لقد قرأت أنه بدلاً من مجرد كتابة مجموعة من الوظائف، يجب أن أستخدم الكائن الحرفي.

هل يمكن لأي شخص أن يشرح مزايا الكائن الحرفي مع الأمثلة، لأنني لا أفهم حتى الآن.

شكرًا

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

المحلول

وكما قال Russ Cam، فإنك تتجنب تلويث مساحة الاسم العالمية، وهو أمر مهم جدًا في هذه الأيام التي يتم فيها دمج البرامج النصية من مواقع متعددة (TinyMCE، وما إلى ذلك).

كما قال أليكس سيكستون، فهو يساعد على تنظيم الكود البرمجي جيدًا أيضًا.

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

var MyThingy = (function() {

    function doSomethingCool() {
        ...
    }

    function internalSomething() {
        ....
    }

    function anotherNiftyThing() {
        // Note that within the scoping function, functions can
        // call each other direct.
        doSomethingCool();
        internalSomething();
    }

    return {
        doSomethingCool: doSomethingCool,
        anotherNiftyThing: anotherNiftyThing
    };
})();

استعمال خارجي:

MyThingy.doSomethingCool();

يتم تغليف وظيفة تحديد النطاق بجميع وظائفك، ثم تقوم باستدعائها على الفور وتخزين قيمتها المرجعة.مزايا:

  • يتم الإعلان عن الوظائف بشكل طبيعي، وبالتالي أسماء.(بينما مع {name: function() { ... }} التنسيق، جميع وظائفك مجهولة، على الرغم من أن الخصائص التي تشير إليها لها أسماء.) تساعدك أدوات مساعدة الأسماء، بدءًا من إظهار مكدسات الاستدعاءات في مصحح الأخطاء، وحتى إخبارك بالوظيفة التي أصدرت استثناءً.(تحديث 2015:تحدد أحدث مواصفات JavaScript، الإصدار السادس من ECMAScript، عددًا كبيرًا من الطرق التي يجب أن يستخدمها محرك JavaScript استدلال اسم الوظيفة.أحد هذه الأمور هو عندما يتم تعيين الوظيفة إلى خاصية كما في موقعنا {name: function() { ... }} مثال.لذلك عندما تقوم المحركات بتنفيذ ES6، فإن هذا السبب سوف يختفي.)
  • يمنحك حرية الحصول على وظائف خاصة تستخدمها وحدتك فقط (مثل my internalSomething فوق).لا يوجد كود آخر في الصفحة يمكنه استدعاء هذه الوظائف؛إنهم خاصون حقًا.فقط تلك التي قمت بتصديرها في النهاية، في بيان الإرجاع، تكون مرئية خارج وظيفة تحديد النطاق.
  • يجعل من السهل إرجاع وظائف مختلفة اعتمادًا على البيئة، إذا تغير التنفيذ تمامًا (مثل عناصر IE-vs-W3C، أو SVG vs.قماش، الخ).

مثال على إرجاع وظائف مختلفة:

var MyUtils = (function() {
    function hookViaAttach(element, eventName, handler) {
        element.attachEvent('on' + eventName, handler);
    }

    function hookViaListener(element, eventName, handler) {
        element.addEventListener(eventName, handler, false);
    }

    return {
        hook: window.attachEvent ? hookViaAttach : hookViaListener
    };
})();

MyUtils.hook(document.getElementById('foo'), 'click', /* handler goes here */);

نصائح أخرى

<ع> استخدام كائن الحرفي (المعروف أيضا باسم كائن نمط الحرفي) لن يلوث مساحة الاسم العالمي بنفس الحدة كما تستخدم العديد من الوظائف المعلنة عالميا سوف، ويساعد أيضا على تنظيم كود بطريقة منطقية

وعلى سبيل المثال، هذا الكائن الحرفي

var obj = {
              find : function(elem) { /* find code */ },
              doSomething: function() { /* doSomething code */ },
              doSomethingElse: function() { /* doSomethingElse code */ }
          }

وبالمقارنة مع

function find(elem) { /* find code */ },
function doSomething() { /* doSomething code */ },
function doSomethingElse() { /* doSomethingElse code */ }

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

obj.doSomething();

وريبيكا مرفى قام الحديث عن الحرفية كائن في مؤتمر مسج لهذا العام. واحدة من أفضل الأسباب لاستخدامها هي منظمة كود ببساطة جيدة.

وهنا هو ريبيكا الكتابة حتى على كائن نمط الحرفي: <لأ href = "http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/" يختلط = "noreferrer"> http://rmurphey.com/blog/2009/10/15/using-objects-to-organize-your-code/

وإيف تستخدم دائما حرفية كائن لأنها وسيلة واضحة لتنظيم التعليمات البرمجية. وهذا هو السبب أنا لا أحب النموذج، هو فوضوي للغاية.

وظائف لا polute مساحة اسم شخص المذكور أعلاه أي أكثر من الحرفية الكائن.

ويمكن بسهولة إرسال حرفي مثل

var obj = {}
var find = function(elem) { /* find code */ },
var doSomething = function() { /* doSomething code */ },
var doSomethingElse = function() { /* doSomethingElse code */ }

والتي من شأنها أن polute من خلال خلق الكثير من الكائنات العالمية نفسها على نفس الوظائف. وبالمثل يمكن أن تفعله:

(function() {
function find(elem) { /* find code */ },
function doSomething() { /* doSomething code */ },
function doSomethingElse() { /* doSomethingElse code */ }
})();

والتي لن إنشاء هذه الكائنات العالمية (كل ما هو كائن في JS)

وبهذه الطريقة كنت لا تزال لا تخلق الكثير من الأشياء العالمية.

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

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

ويمكن أن أكون مخطئا بالطبع ...

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