تحديد وتوسيع فئاتتحديد وتوسيع فئات
المشكلة تحتاج إلى استراتيجية فعالة لتحديد وتوسيع نطاق الطبقات. نظرية دالة هو كائن ، والوصفات السابقة كما توضح ذلك ، فمن المحتمل أن خصائص المنتسبين والأساليب التي تؤدي وظيفة. فلماذا لا بد من إنشاء فئات ، لأن وظائف يمكن تحولت الى الطبقات؟ الجواب تتعلق بمشكلة من معرفة مثيل الدالة. الإغلاق باستخدام جافا سكريبت يمكنك تحديد وظيفة ضمن وظيفة ، كما هو موضح في البرمجية التالية. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / functionsareobjects.html الدالة GetFunctionFixed () (معاهد فار = وظيفة (cmpval) (assertEquals (cmpval ، inst.value) ؛) معاهد العودة ؛) باستخدام متغير محلي ، يمكن الرجوع إليها على سبيل المثال وظيفة أن يكون في إطار تنفيذ هذه المهمة. لأن هذه الأعمال هي وظائف الأشياء ، وبالتالي كائن الرجوع يحدث. الحل باستخدام مبدأ أن الوظائف هي كائنات ، فمن الممكن لإنشاء فئة دون استخدام الكلمات الجديدة ، كما يتضح من المثال التالي ، الذي يستند إلى وظيفة داخل الدالة تقنية. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / definingextendingclasses.html الدالة CreateClassInstance () (معاهد فار = الدالة () (inst.instantiated = 10 ؛ inst.method = الدالة () (inst.instantiated = 20 ؛)) معاهد () ؛ عودة معاهد ؛) في المثال فئة ، فئة "" يتم إنشاؤه لاستدعاء الدالة سيتم تعيين خصائص وظيفة. وبالتالي وظيفة يتصرف مثل فئة "." ومعاهد المتغير المشار إليها في جميع أنحاء الصف "،" مما يجعل من الممكن الإشارة إلى خصائص وأساليب الفئة "." وفي الواقع ، فإن الفئة "" هو يتصرف مثل الطبقة حقيقية ، كما يتضح من رمز الاختبار التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / function_are_classes definingextendingclasses.html : الدالة () (فار cls1 = CreateClassInstance () ؛ معلومات ( "function_are_classes" ، cls1) ؛ cls1.value = 10 ؛assertEquals (10 ، cls1.instantiated) ؛ cls1.method () ؛ assertEquals (20 ، cls1.instantiated) ؛ فار CLS2 = CreateClassInstance () ؛ assertEquals ( "غير معروف" ، typeof (cls2.value)) ؛) ، اختبار التجارب رمز مع الأوجه المختلفة لإثبات أن مثيل "كائن" هو يتصرف مثل كائن. ويظهر رمز الجريئة التي الكائنات "" cls1 وCLS2 هي في الواقع حالتين منفصلتين. وبما أنه يبدو من السهل جدا لإنشاء فئة "" وجوه "،" لماذا هناك كلمة رئيسية جديدة؟ الجواب هو لأن معرفة كيف ترافقي على سبيل المثال وظيفة مع أسلوب معقد بعد "الطبقة" قد تم إنشاء مثيل ، كما يتضح من التعليمات البرمجية المصدر التالية. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / function_classes_generates_error definingextendingclasses.html : الدالة () (cls فار = CreateClassInstance () ؛ cls.method2 = الدالة () ( inst.instantiated = 40 ؛ )حاول ( cls.method2 () ؛testManager.failed () ؛) الصيد (ه) (معلومات ( "functions_classes_generates_error" ، "استثناء المتوقعة (" + ➥ e.toString () + ")")؛)) ، في اختبار إضافية ، "الطبقة" هو مثيل والمخصصة للمتغير cls. المراجع cls متغير "كائن" التي تم توسيعها مع الأسلوب Method2. في تنفيذ Method2 ، "وجوه" المثال المشار إليها باستخدام المتغير معاهد. المتغير معاهد تم اختيارها لأنها كانت تعرف عند الكائن "" تم إنشاء مثيل. تشغيل التعليمات البرمجية سيتم إنشاء استثناء لأن معاهد لم يتم تعريف. لجعل عمل سبيل المثال ، فإن وظيفة المشار إليها بواسطة Method2 اضطروا إلى cls المرجعية. باختصار ، الرجوع إلى مثيل الكائن "" داخل وظيفة هو أكثر تعقيدا مما ينبغي أن يكون. والحل هو الكلمة الجديدة ، كما أنه يربط هذا المعرف مع مثيل الكائن من خلال وظيفة. إعادة كتابة رمز CreateClassInstance لاستخدام الكلمة الجديدة ، وصلنا إلى وظيفة CreateRealClassInstance ، هو موضح في البرمجية التالية. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / definingextendingclasses.html الدالة CreateRealClassInstance () (معاهد فار = الدالة () (this.instantiated = 10 ؛ this.method = الدالة () (this.instantiated = 20 ؛)) عودة معاهد جديدة () ؛) مقارنة CreateClassInstance وCreateRealClassInstance ، والفرق الوحيد هو أن يتم استخدام الكلمات الجديدة في الوقت الذي طالب المتغير معاهد بوصفها وظيفة ، ومعاهد يتم استبدال هذا. باستخدام الكلمة جديدة أمام تحويل الدالة على وظيفة في كائن مخصص سبيل المثال ، حيث مثيل الكائن يمكن الرجوع إليها باستخدام هذا معرف ضمن الدالة. وعاد مثيل كائن يمكن تمديد والمثال المشار إليه باستخدام هذه الكلمة ، كما هو مبين في الاختبار التالي. المصدر : / الانترنت / الجذر / ajaxrecipes / جافا سكريبت / function_instantiates_real_class definingextendingclasses.html : الدالة () (cls فار = CreateRealClassInstance () ؛ cls.method2 = الدالة () (this.instantiated = 40 ؛) assertEquals (10 ، cls.instantiated) ؛ cls . Method2 () ؛ assertEquals (40 ، cls.instantiated) ؛) ، استدعاء الدالة CreateRealClassInstance ، وعاد وجوه سبيل المثال يتم تعيين المتغير cls. الهدف هو توسيع نطاقها لتشمل طريقة Method2 ، وفي تنفيذ Method2 مثيل الكائن المشار إليها باستخدام هذا المتغير. هذه المرة عندما Method2 يسمى ، ليس هناك استثناء والممتلكات مثيل له قيمة 40. إذا كنت معتادا على جافا سكريبت وبالفعل مثيل عدد قليل من الأجسام ، ثم الجملة السابقة مثيل المرجح تبدو غريبة بعض الشيء. الطريقة الكلاسيكية للinstantiating كائن في جافا سكريبت هو كما يلي : MyObject الدالة () () cls فار = MyObject الجديدة () ؛ هذا النهج ينطوي على تحديد وظيفة حيث الوظيفة هو منشئ لكائن من نوع MyObject. عندما MyObject مثيل ، وتدوين هي مشابهة جدا لinstantiating نوع في جافا وجيم # ، وبالتالي المبرمجين الذين أنواع مثيل في جافا سكريبت أبدا مسألة ما يحدث حقا. وثمة تفسير أكثر دقة للطريقة كائن في جافا سكريبت هو عندما يتم تعريف المتغير معاهد كان يستخدم لإنشاء كائن. على وجه التحديد ، هي التي شيدت كائن من خلال تحويل وظيفة في كائن ما ، والدالة المرتبطة رئيسية جديدة هو المنشئ. التلاعب عند فئات جافا سكريبت ، والحفاظ على النقاط التالية في الاعتبار : • ومن الممكن إنشاء أنواع جافا سكريبت دون استخدام الكلمات الجديدة. ومع ذلك ، وخلق جافا سكريبت الخام "الأشياء" لها مساوئ وجود لترافقي "وجوه" مثلا مع الدالة. • جافا سكريبت أنواع الكائنات التي يمكنك تعيين حيوي ، مما يجعل من الممكن لتنفيذ النموذج القائم على البرمجة ، حيث سلوك من النوع الذي يتم تحديد وقت. • وصفات في وقت سابق من هذه المادة وأظهرت كيفية التعامل مع الكائنات وظيفة ، وهو الأسلوب الذي ينطبق أيضا على جافا سكريبت أنواع الكائنات. • واستنادا إلى كل الكائنات جافا سكريبت هو نوع الكائن. • عند استخدام كلمات رئيسية جديدة إلى مثيل نوع ، ويمكن استخدام النموذج الممتلكات المرتبطة الكائن الدالة يكون لتحديد السلوك الذي ينطبق على جميع الحالات من نوع معين. مقال مقدم من سونيا Lande تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات. المهم : هذه المادة "تعريف وتوسيع فئات" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.
|
|||||
| Online: 298 users browsing the articles directory |
|
|