تنفيذ طرق وكيلالمشكلة تحتاج إلى استراتيجية فعالة لتنفيذ طرق وكيل. نظرية وكيل النمط هو الذي يعرف بأنه واجهة لتنفيذ ذلك بمثابة تمريري لتنفيذ حقيقية. أي مستخدم على سبيل المثال من واجهة لن ندرك أن استدعاء أسلوب معين ويجري تغيير مسارها. التنفيذ الكامل لنمط وكيل ليست هي محور هذه المقالة ، بل تركز هذه المقالة على تطبيق نمط وكيل على طريقة واحدة ، وفي طريقة بديلة من الأسلاك معا طريقتين ، طريقة defined2 المرتبطة مثيل فئة هو سلكي لأول استدعاء الأسلوب الجديد ، ومن ثم استدعاء الأسلوب الأصلي ، وفي هذا الشكل من الأسلاك ، وانت لا تطبق على نمط وكيل كنت تقوم بإنشاء نموذج مندوب. والفرق الرئيسي بين وكيل ونموذج مندوب هو أن النموذج الوكيل هو المسؤول عن الدعوة لتنفيذ الأصلي ، وهذا النموذج ليس لديها تفويض هذا التقييد. الحل الآن عليك أن تعرف الفرق بين النموذجين وما تريد تحقيقه ، دعونا نتفحص ما رمز مصدر ينبغي أن تبدو ، ومن ثم تحويل هذا المصدر إلى طريقة عامة. تنظر في ما يلي تعريف الفئة. المصدر : / الانترنت / الجذر / مقالات اياكس / جافا سكريبت / DefinedClass الدالة proxy.html () () DefinedClass.prototype.defined = وظيفة (tstvalue) (معلومات ( "DefinedClass.defined" ، "المعلمة (" tstvalue + + ") الحجج العد ( "+ + arguments.length")")؛ DefinedClass.prototype.defined.value = 10 ؛ assertEquals (tstvalue ، this.value) ؛)الطبقة DefinedClass يتم تعريفها ، ولها طريقة واحدة محددة. وسوف يكون الأسلوب على مستوى وكيل نمط يمكن تطبيقها على تعريفها. الأسلوب الوكيل الذي يسمى قبل الأسلوب الأصلي المحدد على النحو التالي. المصدر : / الانترنت / الجذر / مقالات اياكس / جافا سكريبت / proxy.html فار proxyfunc = وظيفة (tstValue ، toCall ، وسائط) (معلومات ( "proxyfunction" ، "المعلمة (" tstValue + + ") وردت العد وسيطة (" arguments.length + + ") الاعتماد الأصلي وسيطة (" + + args.length ")")؛toCall.apply (هذا ، وسائط) ؛)
تنفيذ الوكيل يمكن أن يشكل تحديا ، وذلك لأن طريقة التنفيذ الحالية (تعريف) لابد من تحرك. لكل وكيل تنفيذ نمط وظيفة المشار إليه بواسطة متغير proxyfunc ليتم استدعاؤها قبل تنفيذ الأسلوب الحالي. والحل البديهي هو لتعيين طريقة محددة للمرجع متغير proxyfunc ، على النحو التالي : DefinedClass.prototype.defined = proxyfunc هذا الحل هو ملتوي ، لأن الأسلوب الأصلي لا يتم الرجوع إليها بواسطة proxyfunc. الأسلوب الأصلي ويبدو أن اختفت ، وعندما لا proxyfunc محاولة لاستدعاء الأسلوب الأصلي ، وسوف يؤدي وجود خطأ. الأسلوب الأصلي يمكن أن تتبع لتنفيذ الاتفاقية حيث الأسلوب المشار إليها بواسطة خاصية أخرى : DefinedClass.prototype.originalDefined = DefinedClass.prototype.defined ؛ DefinedClass.prototype.defined = proxyfunc proxyfunc ، وهي المسؤولة عن استدعاء الأصلي باستخدام تنفيذ الاتفاقية ، ويعرف أن الطريقة الأصلية المخزنة في الممتلكات originalDefined. وهكذا يبدو هذا حسنا ، ولكن في الواقع هناك مشكلة اخرى. ما إذا كان لديك طريقة الوكيل من أسلوب وكيل؟ منذ الأسلوب originalDefined عرفت بالفعل ، هل تفقد الكتابة والأسلوب الأصلي أن تسمى؟ حل آخر يتمثل في توسيع نطاق الاتفاقية على ما يلي : DefinedClass.prototype.originalOriginalDefined = DefinedClass.prototype.originalDefined ؛ DefinedClass.prototype.originalDefined = DefinedClass.prototype.defined ؛ DefinedClass.prototype.defined = proxyfunc الجانب السلبي لهذا الحل هو في الاتفاقية ، المعرف يحتوي على عدد من المحددات الأصلي. وتتطلب الاتفاقية أن وضعت وكيل محدد الأسلوب يكون في مكان معين ، وإلا فإن أسلوب الوكيل لا نعرف ما اذا كان سيدعو originalDefined أو orginalOriginalDefined. مشكلة أخرى هي ، ماذا لو originalDefined المشار طريقة حقيقية؟ والحل لهذه المادة وكيل الطريقة ليست لإنشاء فنادق جديدة ، ولكن جزءا لا يتجزأ من لخلق وظائف. وظائف وتضمينها يجعل من الممكن للإعلان عن الوظيفة التي لا يمكن الوصول إليها من الخارج ، والأسلوب يمكن أن يكون جزءا لا يتجزأ من وكيل داخل أسلوب الوكيل. وجافا سكريبت ولدت يلي : DefinedClass.prototype.defined = الدالة () (origFunc فار = وظيفة (tstvalue) (معلومات ( "DefinedClass.defined" ، "المعلمة (" tstvalue + + ") الحجج العد (" + + arguments.length ")")؛assertEquals (tstvalue ، this.value) ؛) proxyFunc فار = وظيفة (tstValue ، toCall ، وسائط) (معلومات ( "proxyfunction" ، "المعلمة (" tstValue + + ") وردت العد وسيطة (" arguments.length + + ") الأصلي وسيطة العد ( "+ + args.length")")؛ toCall.apply (هذا ، وسائط) ؛) سائط فار = صفيف الجديدة () ؛ ل (فار c1 = 0 ؛ c1 <arguments.length ؛ c1 + +) (وسائط . دفع (الحجج [c1]) ؛) args.push (origFunc) ؛ args.push (الحجج) ؛ proxyFunc.apply (هذا ، وسائط) ؛)
متغيرين ، origFunc وproxyFunc ، مهام المرجعية. المتغير origFunc يمثل تنفيذ الأصلي للطريقة محددة. المتغير proxyFunc يمثل الأسلوب الوكيل الذي يسمى قبل الأسلوب الأصلي. كل من وظائف هي جزء لا يتجزأ من وظيفة غير مسؤولة عن استدعاء الأسلوب الوكيل. دمج وظائف داخل وظيفة لا تتطلب الأسلوب الوكيل أن تعرف ما هي وظيفة ما يسمى الأصلي. لكل مثيل من التضمين ، هناك طريقة وأسلوب الوكيل الأصلي. الاتفاقية هو أن الأسلوب الذي يضمن للطريقتين بتتبع المكالمات منهم والذين ما يتم تمرير المعلمات حولها. دور الوالدين هو أسلوب لإدارة إشارات الطرق جزءا لا يتجزأ ، وإدارة هذا المثال ، وإدارة المعلمات. الأسلوب الأم تدير المعلمات من خلال النظر في الحجج كنوع صفيف. جافا سكريبت المعرفة الحجج الكائن هو مجموعة من الحجج. الأسلوب الوالد سوف تخلق مجموعة جديدة من الحجج بحيث الأسلوب الذي يعرف وظيفة وكيل للدعوة ولديه القدرة على تعديل الحجج التي تستند على سبيل المثال الأصلي الكائن. الغرض من إنشاء مجموعة من الحجج التي تحتوي على حجج تتعلق الإعلان عن أسلوب وكيل ، والتي سوف يكون دائما لها المعلمات الماضي أسلوب الدعوة والحجج. تضمينها ضمن وظيفة وظيفة لديها مشكلة : كيف يمكنك تعيين الإشارة في هذا جزءا لا يتجزأ من وظيفة؟ جافا سكريبت حل هذه المشكلة عن طريق توفير وتطبيق الأسلوب ، الذي يرتبط مع كائن وظيفة. مقال مقدم من سونيا Lande تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات. المهم : هذه المادة "تطبيق أساليب وكيل" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.
|
|||||
| Online: 333 users browsing the articles directory |
|
|