Magdy Doze
-
المساهمات
34 -
تاريخ الانضمام
-
تاريخ آخر زيارة
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
مقال تعليقات بواسطة Magdy Doze
-
-
شكرا جزيلا على المقال الرائع!
عندي سؤال...لماذا لا يمكن اسناد قيمة خاصية بخواص أخرى في نفس التابع الباني؟
اشترط صاحب المقال لحل مسألة (إنشاء حاسبة جديدة) باستخدام الدوال للخواص this.sum و this.mul...لقد حاولت ان احولهما بدون استخدام الدوال ل this.sum = this.v1 + this.v2 و this.mul = this.v1 * this.v2 لكن كان يرجع لي القيمة NaN
فما السبب هنا؟..وما المنطق البرمجي وراء هذا؟
وشكرا جزيلا مرة أخرى
- 1
الباني والعامل "new" في جافاسكربت
في جافاسكربت
نشر
@Wael Aljamalمرحبا وائل وشكرا على ردك
فهمت الآن ما مشكلتي...وهي اني لم أتمكن من فهم كيفية تسلسل الأوامر في الدالة البانية, فالحمد لله ليست مشكلتي في الحل هنا ولا كيف حدث, انما لماذا لا يمكن حلها بطرق أخرى وهذا ما يكشف نقاط الضعف في فهمي
وسأعرض عليك ما حاولت فهمه من ردك ومن التعديل على بعض الأكواد في التمارين التي حللتها في هذه المقالة, لأتأكد ان فهمي صحيح بإذن الله
في تمرين (إنشاء حاسبة جديدة) هذا كان حلي:
ولكن عندما انظر الى المثال المسؤول عنه
فانا بالفعل استدعيت الخاصية e7seb.sum/mul بعد استدعاء الدالة البانية (e7seb.read ()) أي بعد معرفة قيم كل من v1 و v2 بالفعل...فحسب فهمي من المفترض عند تنفيذ الشيفرة وإدخال قيم مثلا (2 و 5) ان تأتي المخرجات من e7seb.sum = 7 و e7seb.mul = 10
وبعد قراءة ردك الكريم فهمت ان الخواص يجب ان تكون معرفة مسبقا, اما التوابع فيمكن ان تنفذ شيفرة معينة لإرجاع قيمتها (الفرق بين e7seb.sum/mul كخاصية/متغير و e7seb.sum/mul كتابع/دالة)...فهل هذا بسبب ان الخاصية e7seb.sum/mul لم تعرف نوع قيمتها كstring او number؟ اما e7seb.sum ()/mul () فهي دوال تنفذ هذه العملية لي وترجع قيمة واحدة فقط فتسند نوع القيمة كnumber لها بناء عليها (بينما في e7seb.sum/mul فهي تتعامل مع قيمتين؟!)
وبناء على هذا حاولت ان اقسم العملية الى دالتين منفصلتين ونجحت
لننتقل الى التدريب (إنشاء مجمِّع)...وهذا كان حلي:
هنا وضعت this.value = 0 خصيصا لأن الشيفرة ترجع لي قيمة NaN أيضا من دونها على الرغم من تعريف قيمة this.value في التابع this.read..واظن ان هذا بسبب ان this.value هي قيمة داخل الدالة فبالتالي تكون في مدى محلي فقط local scope وعند استدعائها في المدى المحلي الأوسع في الدالة البانية Accumulator لا يمكنها التعرف عليها؟
ارجو ان يكون كلامي واضحا, فقد حاولت بقدر الإمكان ان اوصف ما يدور في رأسي عند التفكير في هذه المسائل حتى نكشف موطن الزلل في الفهم ان وجد
شكرا لتفهمك