اذهب إلى المحتوى

Magdy Doze

الأعضاء
  • المساهمات

    34
  • تاريخ الانضمام

  • تاريخ آخر زيارة

آخر الزوار

لوحة آخر الزوار معطلة ولن تظهر للأعضاء

إنجازات Magdy Doze

عضو مساهم

عضو مساهم (2/3)

36

السمعة بالموقع

  1. @Wael Aljamalمرحبا وائل وشكرا على ردك فهمت الآن ما مشكلتي...وهي اني لم أتمكن من فهم كيفية تسلسل الأوامر في الدالة البانية, فالحمد لله ليست مشكلتي في الحل هنا ولا كيف حدث, انما لماذا لا يمكن حلها بطرق أخرى وهذا ما يكشف نقاط الضعف في فهمي وسأعرض عليك ما حاولت فهمه من ردك ومن التعديل على بعض الأكواد في التمارين التي حللتها في هذه المقالة, لأتأكد ان فهمي صحيح بإذن الله في تمرين (إنشاء حاسبة جديدة) هذا كان حلي: function Calculator () { this.read = function () { this.v1 = +prompt ("please, enter the first number") this.v2 = +prompt ("please, enter the second number") } this.sum = function () { return this.v1 + this.v2 } this.mul = function () { return this.v1 * this.v2 } } let e7seb = new Calculator () e7seb.read () alert ("Sum = " + e7seb.sum ()) alert ("Mul = " + e7seb.mul ()) ولكن عندما انظر الى المثال المسؤول عنه function Calculator () { this.read = function () { this.v1 = +prompt ("please, enter the first number") this.v2 = +prompt ("please, enter the second number") } this.sum = this.v1 + this.v2 this.mul = this.v1 * this.v2 } let e7seb = new Calculator () e7seb.read () alert ("Sum = " + e7seb.sum) alert ("Mul = " + e7seb.mul) فانا بالفعل استدعيت الخاصية 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 فهي تتعامل مع قيمتين؟!) وبناء على هذا حاولت ان اقسم العملية الى دالتين منفصلتين ونجحت function values () { v1 = +prompt ("please, enter the first number") v2 = +prompt ("please, enter the second number") } function results () { sum = v1 + v2 mul = v1 * v2 } values () results () alert ("Sum = " + sum) alert ("Mul = " + mul) لننتقل الى التدريب (إنشاء مجمِّع)...وهذا كان حلي: function Accumulator (startingValue) { this.startingValue = startingValue this.value = 0 this.read = function () { this.value += +prompt ("please, enter a number") } this.value += this.startingValue } let mogame3 = new Accumulator (5) mogame3.read () mogame3.read () mogame3.read () alert (mogame3.value) هنا وضعت this.value = 0 خصيصا لأن الشيفرة ترجع لي قيمة NaN أيضا من دونها على الرغم من تعريف قيمة this.value في التابع this.read..واظن ان هذا بسبب ان this.value هي قيمة داخل الدالة فبالتالي تكون في مدى محلي فقط local scope وعند استدعائها في المدى المحلي الأوسع في الدالة البانية Accumulator لا يمكنها التعرف عليها؟ ارجو ان يكون كلامي واضحا, فقد حاولت بقدر الإمكان ان اوصف ما يدور في رأسي عند التفكير في هذه المسائل حتى نكشف موطن الزلل في الفهم ان وجد شكرا لتفهمك
  2. شكرا جزيلا على المقال الرائع! عندي سؤال...لماذا لا يمكن اسناد قيمة خاصية بخواص أخرى في نفس التابع الباني؟ اشترط صاحب المقال لحل مسألة (إنشاء حاسبة جديدة) باستخدام الدوال للخواص this.sum و this.mul...لقد حاولت ان احولهما بدون استخدام الدوال ل this.sum = this.v1 + this.v2 و this.mul = this.v1 * this.v2 لكن كان يرجع لي القيمة NaN فما السبب هنا؟..وما المنطق البرمجي وراء هذا؟ وشكرا جزيلا مرة أخرى
×
×
  • أضف...