تنفيذ المندوبين

المشكلة

  

كنت تريد استخدام بنية مندوب لتبسيط الطريقة التي يدير رمز رمز وتجنب وقوع اشتباكات. نظرية عند كتابة جافا سكريبت ، وغالبا ما سيكون رمز الكفاح من أجل الاهتمام. مثال واحد من القتال رمز للاهتمام هو الحدث window.onload. الحدث window.onload يسمى مرة صفحة أتش تي أم أل قد تحميلها بالكامل وتهيئة. عندما يدعو window.onload المتصفح ، المتصفح النصي هو إعطاء فرصة لتهيئة نفسه مع أتش تي أم أل صفحة كاملة. لscripters ، وهذه الطريقة هي مثيرة جدا للاهتمام ، وإذا كان هناك نوعان من أدوات العمل باستخدام window.onload ، أكثر احتمالا من عدمه واحد سيتم الكتابة فوق الأخرى. تخيل الشفرة التالية مكتوبة من جانب واحد الدليل : window.onload = الدالة () (/ / مجموعة أدوات تهيئة 1) وفي هذا المثال رمز والدليل هو انه عندما حدث onload يسمى ، بلدي استخدام الوظيفة. وقال إن مجموعة أدوات الثانية المهتمة في حال تعيين onload window.onload إلى ما يلي : window.onload = الدالة () (/ / تهيئة مجموعة أدوات 2) والاحالة الثانية سوف تعمل ، ولكن السؤال الذي يثار هنا ، فإن ما يحدث في التهيئة لمجموعة الأدوات 1؟ والجواب هو أنه لا يسمى. أدوات 1 و 2 يقاتلون من أجل الانتباه لهذا الحدث onload ، وأيا كان الفائز هو مجموعة أدوات يعين الحدث onload الماضي. وهناك ثلاثة الحلول الممكنة لهذه المعضلة :

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

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

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

window.onload = الدالة () (initializeToolkit1 () ؛ initializeToolkit2 () ؛)

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

وinitializeToolkit1 وinitializeToolkit2 وظائف لا علاقة لها مع بعضها البعض ، وعندما دعا ، يمكن أن يكون كل خداعهم بسهولة أنها الوظيفة الوحيدة المخصصة لهذا الحدث onload. وقال مندوب ليست مثل وكيل ، في ان وفدا تدعو جميع وظائف ، في حين سيتم استدعاء وكيل أول وظيفة ومن ثم نتوقع من وظيفة ودعا الى استدعاء وظائف أخرى. ومن وجهة نظر التنفيذ ، وهو مندوب لديه التنفيذ تشبه الى حد بعيد وكيل. تنفيذ جافا سكريبت لمندوب لا تختلف عن مندوب التقليدي لانه لا يوجد احد وجوه سبيل المثال إدارة كافة المراجع. وفي تنفيذ الكلاسيكية مندوب ، استدعاء الدالة window.onload ستدعو إلى مندوب الكائن هيكل ، الذي يدعو الإشارات الدالة المدارة. في حالة المثال ، وهذا يعني استدعاء مندوب الكائن هيكل تدعو initializeToolkit1 وinitializeToolkit2. جافا سكريبت في تنفيذ مندوب والمراجع window.onload أحد الوالدين الذي يحتوي على وظيفة مندوب مرجعين الدالة : func1 وfunc2. الأصل وظيفة مندوب يدعو كلا func1 وfunc2. وظائف مندوب الأم عندما يتم ربط معا ، func1 (المختار لأغراض التوضيح) إشارات دالة لاستدعاء (initializeToolkit1) ، وfunc2 (اختارت مرة أخرى لأغراض التوضيح) مراجع المقبل وفد الأصل في السلسلة. وفد المقبل في الأصل ، واحدة من الإشارات الدالة على وظيفة الدعوة (initializeFunction2) ، وغيرها من الإشارات الدالة آخر الأصل وظيفة مندوب. فهم المشكلة التسلسل ، تحاول تصور لتسلسل المراجع باستخدام window.onload :

window.onload = الدالة () (delegates.invoke (هذا ، والحجج) ؛) العازلة فار = ops.serialize (window.onload) ؛

على سبيل المثال ، وظيفة مراجع window.onload الذي يستدعي delegates.invoke الأسلوب العالمي المتغير ، والتي ستقوم باستدعاء وظائف initializeToolkit1 وinitializeToolkit2. إذا أردنا أن ننقذ الدولة من الصفحة أتش تي أم أل ، فإننا سوف تسلسل window.onload لأنها المعيار المرجعي نقطة. بعد تسلسل window.onload لا تسلسل المندوبين. ويسلسل الاشارة الى المندوبين ، وبالتالي عندما تكون الصفحة إعادة إنشاء مثيل المندوبين سيكون في عداد المفقودين. يمكنك قراءة الفقرة السابقة وأعتقد أنني فقدت الرخام ، ولأن ذلك ليس من التسلسل كيف يتم ذلك. هل يمكن تطبيق الحل التالي بدلا من ذلك :

window.unload = الدالة () (العازلة فار = ops.serialize (مندوبا) ؛) `

في هذا الحل ، وتفريغ وظيفة وسوف يطلق ، وسلسلة من البيانات التي تمثل المندوبين سيتم إنشاؤه. ولكن هذا هو الحل الصحيح واقعيا؟ وإنني أرى أن الحل هو تفويض مشكلة المندوبين المتغير إلى موقع آخر ، وأنه ليس من حل أي شيء. تخيل ، مثلا ، التي كنت تسلسل ولاية صفحة. كما كنت أعاد العناصر ، كنت توليد الوظائف المرتبطة بها. لذلك سوف تسلسل window.load وwindow.unload. والميزة الكبرى لهذا النهج هو أنه عندما الترميز باستخدام نموذج المستندة إلى لغة جافا سكريبت الذي هو انك لا تشعر بالقلق بشأن تطبيقات متعددة تقاسم نفس المراجع. باستخدام قيمة النهج القائم ، يمكنك نسخ وظيفة واحدة من كائن إلى آخر وأنه لا تقلق مشكلة mixin المبينة في المادة 2-15. والآن بعد أن كنت على دراية نظرية وراء تنفيذ مندوب ، دعونا ننظر في التفاصيل الفنية .

 المصدر : / الانترنت / الجذر / مخطوطات / jaxson / Common.js مندوب : وظيفة (مثلا ، funcIdentifier ، newFunc) (delegatePrototype فار = الدالة () (فار func1 = __replace1 ؛ فار func2 = __replace2 ؛ func1.apply (هذا ، والحجج) ؛ func2 . تطبيق (هذا ، والحجج) ؛) origFunc فار ، وإذا (! سبيل المثال [funcIdentifier]) (origFunc = الدالة () () ؛) والا (origFunc = سبيل المثال [funcIdentifier] ؛) سبيل المثال [funcIdentifier] = Generics.expand (delegatePrototype ، (__replace1 : origFunc ، __replace2 : newFunc)) ؛) ، المصدر : / الانترنت / الجذر / مقالات اياكس / جافا سكريبت / window.onload exceptions.html = الدالة () (window.onerror = الدالة (جي اس ، الملف ، والموقع) (معلومات ( "window.onerror1" ، "جي اس (" جي اس + + " (ملف) "+ + ملف") على الموقع ( "موقع + +")")؛)) ops.delegate (نافذة "onload" ، الدالة () (window.onerror = الدالة (جي اس ، الملف ، والموقع) (معلومات ( "window.onerror2" ، "جي اس (" جي اس + + "(ملف)" + + ملف ") على الموقع (" موقع + + ")")؛))) ؛

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

• المندوبين تسمح المبرمجين لمشاركة رد الأسلوب ، ولكن ينبغي ألا نفترض أن الموارد في تنفيذها الطريقة هي حصرية.

• المندوبين حل المشكلة حيث استدعاء أسلوب واحد يمكن استخدامه لإجراء المكالمات الأسلوب متعددة.

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

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

مقال مقدم من سونيا Lande


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


Online: 466 users browsing the articles directory