JavaScripot دالاتعلاج وظائف مثل الأجسام
المشكلة تحتاج إلى الاستفادة من حقيقة أن الوظائف هي كائنات (تذكر ، كل شيء هو كائن في جافا سكريبت). نظرية كثير من الناس يعتقدون أن الوظيفة هي بعض الكلمات المستخدمة في جافا سكريبت. وثمة وظيفة هو أيضا كائن التي يمكن التلاعب بها. مع العلم أن وظيفة هو كائن يجعلها مثيرة جدا للاهتمام من منظور كتابة شفرة جافا سكريبت ، لأن رمز يمكن أن تعالج مثل كائن آخر وظيفة أخرى. هذا يعني أنك يمكن تخصيص وظائف للمتغيرات ، خصائص الطبقة ، وماذا لديكم. الحل طريقة واحدة لاستخدام هذه القدرة لتنفيذ نمط مصنع للعودة إلى وجوه وظيفة. على سبيل المثال ، في اياكس لديك طريقتين لإنشاء الكائن XMLHttpRequest ، والأسلوب المستخدم يعتمد على المتصفح. نمط مصنع يستخدم لفصل واجهة من التنفيذ. وعادة ما يعني تنفيذ واجهة ، ولكن نظرا لأن جافا سكريبت لغة دينامية ، لا يوجد أي مفهوم حقيقي من واجهة. بلغة ديناميكية ، واجهة ليست ضرورية لأنه يمكنك استدعاء أسلوب مباشرة دون اشتراط نوع معين ، وفي حالة من XMLHttpRequest مثيل الكائن ، ونمط مصنع بإرجاع مرجع الدالة التي يمكن استخدامها لإنشاء مثيل XMLHttpRequest استخدام هذا الاسلوب المناسب وفي جافا سكريبت ، وهي وظيفة هو كائن التي يمكن تعيينها إلى متغير. وهناك طريقة لتنفيذ مصنع لinstantiates XMLHttpRequest هو استخدام الإحالات الدالة. التنفيذ الكامل هو كما يلي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / functionsareobjects.html الدالة InstantiateIEXMLHttpRequest () (عودة ActiveXObject الجديدة ( "Microsoft.XMLHTTP") ؛) InstantiateOthersXMLHttpRequest الدالة () (عودة جديدة XMLHttpRequest () ؛) FactoryXMLHttpRequest الدالة () (اذا (window. XMLHttpRequest) (عودة InstantiateOthersXMLHttpRequest ؛) والا اذا (window.ActiveXObject) (عودة InstantiateIEXMLHttpRequest ؛) رمي خطأ جديدا ( "Couldn't مثيل XMLHttpRequest") ؛) في المثال السابق ، فإن وظيفة FactoryXMLHttpRequest هو تنفيذ نمط مصنع. في إطار تنفيذ الدالة هما إذا تحقق من التصريحات التي المستعرض الذي هو قيد التشغيل حاليا. اعتمادا على المتصفح ، فإن البيان عودة عودة إشارة إلى إما InstantiateIEXMLHttpRequest أو الدالة InstantiateOthersXMLHttpRequest. في كلتا الحالتين ، وعاد هو إشارة دالة التي سيتم إنشاء الكائن XMLHttpRequest. رمز يستخدم الأسلوب FactoryXMLHttpRequest التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / factory_function functionsareobjects.html : الدالة () (فار InstantiateXMLHttpRequest = FactoryXMLHttpRequest () ؛ xmlhttp فار = InstantiateXMLHttpRequest () ؛ assertNotNull (xmlhttp) ؛) ، تلاحظ في المثال كيف المتغير InstantiateXMLHttpRequest يمكن معالجتها بوصفها وظيفة. لأغراض توضيحية ، المتغير InstantiateXMLHttpRequest يستخدم خليطا من الأحرف الكبيرة والصغيرة لتوضيح أنه عندما يتم استدعاء المتغير ، فإنه يبدو وكأنه استدعاء الدالة. استنادا إلى معرف والسياق الذي يستخدم المتغير بوصفها وظيفة ، وكنت لا أعرف أن المتغير ليست وظيفة. هذه نقطة مهمة جدا ، لأنها توضح أن وظيفة هو مجرد كائن آخر. FactoryXMLHttpRequest يتم ترميز باستخدام النهج التقليدي : رمز وظيفة تعلن أنه عندما دعا سيعود مثيل وظيفة. سلوك رمز يتحدد بعد رمز وقد تم تحليل وتهيئة. مع جافا سكريبت ، وهذا ليس ضروريا ، لأنه يمكنك تهيئة الوظائف عند رمز يجري تحليل لانها الأمثل. على سبيل المثال ، هل يمكن كتابة التعليمات البرمجية FactoryXMLHttpRequest على النحو التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / functionsareobjects.html في تنفيذ تعديل ، والرموز المستخدمة لتعيين متغير InstantiateXMLHttpRequest يتم تنفيذها كما يتم تحميل الصفحة أتش تي أم أل. وبالتالي ، كلما كان ذلك المتغير InstantiateXMLHttpRequest المشار إليها بوصفها وظيفة ، والطريقة المناسبة لinstantiating XMLHttpRequest يتم تنفيذه. ليست هناك حاجة للدعوة الى المصنع واتخاذ قرار في كل مرة يتم استدعاء الدالة. وهذه القدرة على معالجة المهام كما يضيف أشياء مثيرة للاهتمام الترميز سطيح ، في هذا السلوك من رمز لا يمكن أن يتقرر في وقت التشغيل. حيث عادة ما تفضلتم استخدام بنية القرار في تحديد السلوك المناسب ، متغير تعيين حيوي يمكن استخدامها ، ولأن وظيفة هو كائن ، وهناك بعض الاحتمالات ترميز إضافية. على سبيل المثال ، فمن الممكن أن حيوي تعيين الخصائص والأساليب إلى وظيفة ، كما هو موضح في المثال التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / functionsareobjects.html الدالة FunctionFunctionProperties (cmpval) (assertEquals (cmpval ، FunctionFunctionProperties.value) ؛) فار VariableFunctionProperties = وظيفة (cmpval) (assertEquals (cmpval ، VariableFunctionProperties.value) ؛) startIndex فار = VariableFunctionProperties . toString (). indexOf ( "{")؛endIndex فار = VariableFunctionProperties.toString (). lastIndexOf ("}")؛ العازلة فار = VariableFunctionProperties.toString (). شريحة (startIndex + 1 ، endIndex) ؛ InstantiatedFunctionProperties فار = الجديدة وظيفة ( "cmpval" ، منطقة عازلة) ؛ هذا المثال يوضح ثلاثة إعلانات وظيفة ، مع كل اعلان توضح طريقة مختلفة للإعلان عن وظيفة المثال. أول إعلان ، FunctionFunctionProperties ، هو النهج التقليدي. الإعلان الثاني ، VariableFunctionProperties ، يستخدم متغير وظيفة مجهول. والإعلان الثالث ، InstantiatedFunctionProperties ، هو مثيل صريح من وجوه الفعل ، حيث معلمات منشئ تمثل إعلانا من المعلمات ، والمعلمة الأخيرة هي وظيفة الجسم. وظيفة الجسم هو العازلة من شفرة جافا سكريبت التي يتم تحويلها الى جافا سكريبت القابل للتنفيذ. للحصول على كل واحد من ثلاثة تطبيقات وظيفة ، واسم الوظيفة المشار إليها ، وإلحاق مع الإشارة إلى قيمة العقار. مع كل وظيفة المثال يمكنك تعيين خاصية أو ، إذا كنت ترغب في ذلك ، إشارة دالة أخرى. كنت اعتقد ان من خصائص كوسيلة لتعريف متغير ثابت مقترن وظيفة ، ولأن كل واحد من ثلاثة إعلانات وظيفة ويمثل كائن متغير ، يمكن وصفها بأنها بطريقة مماثلة ، كما هو موضح في المثال التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / function_with_properties functionsareobjects.html : الدالة () (VariableFunctionProperties.value = 10 ؛ VariableFunctionProperties (10) ؛ FunctionFunctionProperties.value = 10 ؛ FunctionFunctionProperties (10) ؛ InstantiatedFunctionProperties.value = 10 ؛ InstantiatedFunctionProperties (10) ؛ testManager.success () ؛) ، قراءة الشفرة التي تدعو الى وظائف أعلن يتطلب قليلا من التعود. قبل كل استدعاء الدالة ، المعرف يستخدم كما لو أنه كائن. بعد الكائن المشار إليها ، الكائن يسمى بوصفها وظيفة. هذه الأمثلة تشير بوضوح إلى أن لديهم وظائف ذات طبيعة مزدوجة ، حيث الوظائف هي كائنات وأشياء يمكن أن تكون وظائف. هذه الطبيعة المزدوجة يطرح مشكلة : كيف يمكن تنفيذ مهمة للتعرف على سبيل المثال وظيفة؟ رمز التالي يوضح هذه المشكلة. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / function_with_properties functionsareobjects.html : الدالة () (VariableFunctionProperties.value = 10 ؛ VariableFunctionProperties (10) ؛ FunctionFunctionProperties.value = 10 ؛ FunctionFunctionProperties (10) ؛ InstantiatedFunctionProperties.value = 10 ؛ InstantiatedFunctionProperties (10) ؛ testManager.success () ؛) ، قراءة الشفرة التي تدعو الى وظائف أعلن يتطلب قليلا من التعود. قبل كل استدعاء الدالة ، المعرف يستخدم كما لو أنه كائن. بعد الكائن المشار إليها ، الكائن يسمى بوصفها وظيفة. هذه الأمثلة تشير بوضوح إلى أن لديهم وظائف ذات طبيعة مزدوجة ، حيث الوظائف هي كائنات وأشياء يمكن أن تكون وظائف. هذه الطبيعة المزدوجة يطرح مشكلة : كيف يمكن تنفيذ مهمة للتعرف على سبيل المثال وظيفة؟ رمز التالي يوضح هذه المشكلة. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / functionsareobjects.html الدالة GetFunction () (عودة وظيفة (cmpvalue) (assertEquals (cmpval ، unknownfunctioninstance. القيمة) ؛)) على سبيل المثال ، الدالة GetFunction له التنفيذ التي تقوم بإرجاع وظيفة فريدة من نوعها سبيل المثال كل وGetFunction الوقت يسمى. إذا أردت الإشارة خاصية سبيل المثال وظيفة ، هل سيكون من الصعب عليها أن تفعل ذلك ، لأن وظيفة مجهول لا يوجد لديه المرتبطة المعرف. في الأمثلة السابقة ، وكان يستخدم للإشارة إلى وظيفة على سبيل المثال الإشارة إلى خصائص وأساليب الكائن الدالة. باستخدام هذه الطريقة في الإعلان عن وظيفة ، لا يوجد سبيل المثال يرتبط المعرف ، وبأي حال من الأحوال أن تكون قادرة على الرجوع الخاصية الدالة المجهول. الحل يكمن في استخدام متغير الداخلية المشار إليها ، كما يوضح المثال التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / functionsareobjects.html الدالة GetFunctionFixed () (معاهد فار = وظيفة (cmpval) (assertEquals (cmpval ، inst.value) ؛) معاهد العودة ؛) كيف يمكن للرمز أن حل المشكلة على سبيل المثال من غير معروفة حتى يعمل فعلا قد تبدو غامضة بعض الشيء في البداية. انه ينطوي على استخدام أسلوب البرمجة المعروفة باسم ل إغلاق. لفهم كيفية عمل الإغلاق ، ونتذكر أن نفكر في وظيفة ككائن ، وليس بعض الكلمات الدالة بناء. وهنا ما يحدث في وباختصار يمكن القول : 1. المستدعي يطلب GetFunctionFixed. 2. تنفيذ GetFunctionFixed يتم تنفيذه. 3. وظيفة المجهول المعلنة ، والفعل هو كائن مثيل. 4. وظيفة مثيل مجهول يتم تعيينها المحلية أعلنت معاهد متغير. 5. المجهول وظيفة مراجع معاهد ، ويفهم هذا المعالج جافا سكريبت ، ويخلق في اشارة الى اعلان متغير المحلية. 6. المتغير معاهد يتم إرجاعها إلى الطالب. 7. جامع القمامة محاولات لجمع القمامة معاهد ، ولكنه لا يستطيع ذلك لأن الإشارات الدالة المجهول معاهد طالما المجهول المشار إليها في مكان ما ، عند النظر في الخطوات التالية في هذه العملية جنبا إلى جنب مع حقيقة أن كل ما هو كائن ، فإنه يصبح من السهل أن نرى كيف يعمل هذا الرمز. عندما مراجع كائن كائن آخر ، لا يمكن إلا أن تكون الكائنات جمع القمامة اذا لم يفعلوا أي شيء المرجعية. عند استخدام وظائف والتعامل معها بوصفها كائنات ، والحفاظ على النقاط التالية في الاعتبار : • وظائف هي كائنات ، ويمكنك معالجتها مثل جافا سكريبت أي أجسام أخرى. ومع ذلك ، لأن مهام والكائنات ، وذلك باستخدام وظائف غير سليم أو غير سليم خصائص وظائف يمكن أن يسبب الثقوب الذاكرة، حيث الذاكرة المشار إليها ، وعدم جمع القمامة ، على الرغم من أن السيناريو لم يتم الاستفادة من الذاكرة. • والتكوين من وظائف أو الأساليب هو ممكن عندما تكون الصفحة أتش تي أم أل يتم تحميلها. وهذا يوفر تجهيز المنطق ، ورمز لا يحتاج إلى تحديد ما يجب أن يكون رمز أعدم. • يستغرق قليلا من الوقت والتجريب لتعتاد على فكرة أن سلوك رمز يتم تحديد وقت ، وليس في الوقت الذي كنت كتابة التعليمات البرمجية. • الأشياء التي يجري والوظائف يمكن أن خصائص إشارة أو الأساليب ، وتمكين وظائف لتحديد السلوك في وقت التشغيل. إذا كنت تعيين خصائص أو أساليب إلى وظائف ، ثم القيام بذلك على أساس أن هذه الخصائص والأساليب التي يتم عادة عابرة ، إذا وظيفة يتم نسخ من مثيل واحد إلى آخر ، لا تفترض أن يتم نسخ خصائص جدا. مقال مقدم من سونيا Lande تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات. المهم : هذه المادة "JavaScripot وظائف" قد ترجم من قبل أحد البرامج تلقائيا. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.
|
|||||
| Online: 203 users browsing the articles directory |
|
|