Emad Saif نشر 17 مايو 2022 أرسل تقرير نشر 17 مايو 2022 عندما أقوم بعمل دالة بانية constructor وأريد أن أجعلها تأخذ بعض المدخلات inputs يجب أن أستعمل this بالشكل التالي: function User(name, email, age) { this.name = name; this.email = email; this.age = age; console.log("user created with name", this.name); } const firstUser = new User("full name", "user@mail.com", 23); لماذا لا نكتب الكود بطريقة مباشرة: function User(name, email, age) { console.log("user created with name", name); } const firstUser = new User("full name", "user@mail.com", 23); هل يوجد فرق بين الطريقتين؟ وأيهما أفضل؟ 1 اقتباس
1 Adnane Kadri نشر 17 مايو 2022 أرسل تقرير نشر 17 مايو 2022 في الحقيقة وفي مثالك، لا أظن أنه يوجد أي فرق جدير بالذكر بين الطريقتين فأنت في المرة الأولى تستقبل المعامل name عن طريق الباني وتسنده الى خاصية تخص الكائن User وطباعتها في آخر الأمر. ثم في المرة الثانية باستقبال المعامل name عن طريق الباني ثم طباعته مباشرة. ففي المرة الاولى، name معامل وخاصية للكائن. وفي المرة الثانية، معامل وفقط. كنت لأختار الطريقة الأولى، وذلك لأنك تقوم بتهيئة كائنات جديدة عن الصنف User عن طريق الكلمة المفتاحية new التي تقوم بإنشاء كائن فيفترض ان كل منها يميز عن الآخر. كما ان الطريقة الأولى تخدم مبدأ التوسع scalability فالخاصية name ستكون متاحة أيضا للاستعمال او اعادة التعيين من قبل اي تابع للكائن يتوقع انشاءه مستقبلا قبل طباعة خرجه. اقتباس
1 Hassan Hedr نشر 17 مايو 2022 أرسل تقرير نشر 17 مايو 2022 في حال كنت تريد اعتبار الكائن عحاوية للخصائص ضمنها وللتوابع الخاصة للتعامل مع تلك الخصائص هنا يأتي دور البرمجة كائنية التوجه وتعريف المفهوم كصنف ضمن التطبيق، مثال يمكنك بعد تعريف الكائن الإشارة لاحقًا للخصائص التي يحتويها، وهنا يأتي دور الكلمة this حيث تعين قيم الخصائص على كل كائن جديد يتم إنشاؤه باستخدام new: function Person(name) { this.name = name; this.sayHi = () => console.log("My name is " + this.name); } const emad = new Person("Emad"); // لاحقا يمكن التالي emad.sayHi(); // My name is Emad console.log(emad.name) // Emad بينما في حال تعريفك للمفهوم على شكل تابع، فأنت تعامله كإجرائية تنفذ مرة واحدة وتنسى، أي لا يمكنك لاحقًا الاستفادة من الخواص الممررة للتابع، هي مجرد عمل ينفذ في كل مرة يستدعى التابع، يسمى هذا الأسلوب بالبرمجة الوظيفية ،مثال: function Person(name) { console.log("My name is " + this.name); } // يستدعى في كل مرة نريد التنفيذ Person("Emad"); // My name is Emad Person("Bilal"); // My name is Bilal يمكنك الاستفادة من قراءة المقالات التالية: اقتباس
0 Wael Aljamal نشر 19 مايو 2022 أرسل تقرير نشر 19 مايو 2022 أعتقد أن مثالك غير واضح، لتجريب الوصول لخواص كائن، حاول استدعائها منه بعد إنشائه كالمثال: قمت بحذف الكلمة المفتاحية this محاولة الوصول لخاصية بعد إنشاء الصنف وهي تعيد undefined أي لم يتم إنشاء خاصية للصنف بالأصل function User(name, email, age) { name1 = name; email1 = email; age1 = age; } const firstUser1 = new User("full name", "user@mail.com", 23); console.log(firstUser1.name1); undefined console.log(firstUser1.email1); undefined بدون استعمال this أنت تقوم بتعريف متغيرات مؤقتة ضمن الدالة البانية name1 - email1 - age1 ولن تستفيد منهم بعد إنتهاء التنفيذ و إنشاء الكائن الذي سيكون بدون خواص (يتوجب استخدام this) أي خاصية نسندها ل this سوف تصبح من خواص الصنف و الكائنات المشتقة منه بدون this: مع this: اقتباس
السؤال
Emad Saif
عندما أقوم بعمل دالة بانية constructor وأريد أن أجعلها تأخذ بعض المدخلات inputs يجب أن أستعمل this بالشكل التالي:
لماذا لا نكتب الكود بطريقة مباشرة:
هل يوجد فرق بين الطريقتين؟ وأيهما أفضل؟
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.