محمود سعداوي2 نشر 25 أغسطس أرسل تقرير نشر 25 أغسطس السلام عليكم. أرجو توضيح سبب طباعة النتيجة في الدالتين التالييتين 1. const sayHello = () => { return "Hello" } console.log(sayHello.prototype) /* النتيجة undefined */ 2. function sayHello() { return "Hello" } console.log(sayHello.prototype) /** النتيجة: constructor : ƒ sayHello() [[Prototype]] : Object */ أو بطرقة أخرى لماذا تمت طباعة undefined في الدالة السهمية شكرا 1 اقتباس
0 Mustafa Suleiman نشر 25 أغسطس أرسل تقرير نشر 25 أغسطس الفكرة كلها تكمن في this حيث أنّ arrow function لا تمتلك this خاصة بها وبالتبعية لا تمتلك خاصية Prototype، فلو قمت باستخدام this بداخلها ستشير إلى النطاق العام window في المتصفح أو Global في Node.js أو نطاق scope الدالة التي تم تعريفها به. وللعلم لا تمتلك constructor أيضًا، بالتالي لا تستخدم كدوال بانية مثل الدوال العادية. السبب يعود إلى الطريقة التي تم بها تطوير الدوال السهمية في جافاسكريبت، فهي مصممة لتكون سهلة الاستخدام وبسيطة ومختصرة، بالتالي ليس بها كل تلك الخصائص الموجودة في الدوال العادية، أي ليس ذلك الاستخدام use case الخاص بها، فهي جيدة عندما تتعامل مع الـ closures أو callbacks، لكن تجنب استخدامها عندما تتعامل مع الميثودز في class/object أو الـ constructors. ستجد تفصيل هنا: الدوال السهمية في JavaScript Arrow function expressions 1 اقتباس
0 عبدالباسط ابراهيم نشر 27 أغسطس أرسل تقرير نشر 27 أغسطس شرح مصطفى في التعليق السابق الفرق بشكل رائع ولكن لنحاول أولاً معرفة ما هي الخاصية prototype في JavaScript، كل دالة عبارة عن كائن لذلك تحتوي على خاصية تُسمى prototype. هذه الخاصية تستخدم لتخزين الخصائص والدوال التي تُستخدم عندما تقوم بإنشاء كائنات جديدة باستخدام هذه الدالة كمنشئ (constructor) بواسطة الكلمة المفتاحية new. للتوضيح أكثر لنفترض Person هي دالة تقليدية تحتوي على خاصية prototype التي تحتوي على دالة مثلاً sayHello. هذا يعني أن أي كائن يتم إنشاؤه بواسطة Person سيحصل على هذه الدالة من خلال سلسلة ال prototype. ولكن بالنسبة للدوال السهمية (Arrow Functions) تم تقديمها في ES6 وهي دوال تتميز بالعديد من الخصائص الجديدة. ولكن الدوال السهمية لا تحتوي على خاصية prototype حيث تم تصميمها لتكون أكثر بساطة وتستعمل بشكل رئيسي كدوال غير موجهة. لذلك لا يمكن استخدام الدوال السهمية كمنشئات: لا يمكنك استخدام دالة سهمية مع الكلمة المفتاحية new لإنشاء كائنات جديدة. لذلك، لا حاجة لتوفير خاصية prototype في الدوال السهمية، لأنها ليست مصممة لهذا الغرض. اقتباس
السؤال
محمود سعداوي2
السلام عليكم.
أرجو توضيح سبب طباعة النتيجة في الدالتين التالييتين
1.
const sayHello = () => { return "Hello" } console.log(sayHello.prototype) /* النتيجة undefined */
2.
function sayHello() { return "Hello" } console.log(sayHello.prototype) /** النتيجة: constructor : ƒ sayHello() [[Prototype]] : Object */
أو بطرقة أخرى لماذا تمت طباعة undefined في الدالة السهمية
شكرا
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.