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

السؤال

نشر

السلام عليكم.

أرجو توضيح سبب طباعة النتيجة في الدالتين التالييتين

1.

const sayHello = () => {
    return "Hello"
}
console.log(sayHello.prototype)
/*
النتيجة
undefined
*/

2.

function sayHello() {
    return "Hello"
}
console.log(sayHello.prototype)

/**
 النتيجة:
constructor
: 
ƒ sayHello()
[[Prototype]]
: 
Object
*/

أو بطرقة أخرى لماذا تمت طباعة undefined في الدالة السهمية

شكرا

Recommended Posts

  • 0
نشر

الفكرة كلها تكمن في this حيث أنّ arrow function لا تمتلك this خاصة بها وبالتبعية لا تمتلك خاصية Prototype، فلو قمت باستخدام this بداخلها ستشير إلى النطاق العام window في المتصفح أو Global في Node.js أو نطاق scope الدالة التي تم تعريفها به.

وللعلم لا تمتلك constructor  أيضًا، بالتالي لا تستخدم كدوال بانية مثل الدوال العادية.

السبب يعود إلى الطريقة التي تم بها تطوير الدوال السهمية في جافاسكريبت، فهي مصممة لتكون سهلة الاستخدام وبسيطة ومختصرة، بالتالي ليس بها كل تلك الخصائص الموجودة في الدوال العادية، أي ليس ذلك الاستخدام use case الخاص بها، فهي جيدة عندما تتعامل مع الـ closures أو callbacks، لكن تجنب استخدامها عندما تتعامل مع الميثودز في class/object أو الـ  constructors.

ستجد تفصيل هنا:

  • 0
نشر

شرح مصطفى في التعليق السابق الفرق بشكل رائع ولكن لنحاول أولاً معرفة ما هي الخاصية prototype 

في JavaScript، كل دالة عبارة عن كائن لذلك تحتوي على خاصية تُسمى prototype. هذه الخاصية تستخدم لتخزين الخصائص والدوال التي تُستخدم عندما تقوم بإنشاء كائنات جديدة باستخدام هذه الدالة كمنشئ (constructor) بواسطة الكلمة المفتاحية new.

للتوضيح أكثر لنفترض Person هي دالة تقليدية تحتوي على خاصية prototype التي تحتوي على دالة مثلاً sayHello. هذا يعني أن أي كائن يتم إنشاؤه بواسطة Person سيحصل على هذه الدالة من خلال سلسلة ال prototype.

ولكن بالنسبة للدوال السهمية (Arrow Functions) تم تقديمها في ES6 وهي دوال تتميز بالعديد من الخصائص الجديدة. ولكن الدوال السهمية لا تحتوي على خاصية prototype حيث  تم تصميمها لتكون أكثر بساطة وتستعمل بشكل رئيسي كدوال غير موجهة.

لذلك لا يمكن استخدام الدوال السهمية كمنشئات: لا يمكنك استخدام دالة سهمية مع الكلمة المفتاحية new لإنشاء كائنات جديدة. لذلك، لا حاجة لتوفير خاصية prototype في الدوال السهمية، لأنها ليست مصممة لهذا الغرض.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...