للاحتفال بأنني لم أكتب مدونة لمدة 10 سنوات ، ستبدأ أول منشور في المدونة بمثل هذه الخدعة المثيرة للاهتمام-___-
في ES5 ، عندما نسمي وظيفة ، إذا تم إنشاء المعلمات المراد تمريرها بناءً على وظائف أو شروط أخرى ، أي عندما لا نكون متأكدين من عدد المعلمات التي سيتم تمريرها ، فما الذي يجب أن نفعله دون تغيير الوظيفة الأصلية؟
(بالطبع ، حاول تجنب الموقف الموضح في هذه المقالة ، مثل تغيير المعلمة إلى الكائن أو الصفيف ، وما إلى ذلك)
قد يعرف معظم الناس أن استخدام التطبيق يمكن أن يحل هذه المشكلة بشكل مثالي:
مثل الاتصال ، سيتم استخدام المعلمة الأولى ككائن استدعاء للوظيفة ، أي مؤشر هذا في وظيفة الاتصال تتم إعادة كتابة كمعلمة الأولى. إذا لم تكن طريقة الكائن ، فيمكنك تجاهل ذلك وتمرير فارغ.
الفرق هو أن المعلمات التالية ، تطبيق يضع جميع المعلمات المراد تمريرها في وظيفة الاتصال في صفيف ، ويتم إلحاق الاتصال بتسلسل مثل الوظيفة الأصلية.
لأنه صفيف ، يمكن التحكم فيه. يمكن لإنشاء صفيف استنادًا إلى وظائف أخرى أو أحكام منطقية تحقيق الغرض من تمرير معلمات الأرقام الديناميكية.
لكنني واجهت صداع. اضطررت إلى المرور في المعلمات الديناميكية عند إنشاء كائن مع جديد. استغرق الأمر مني مرة واحدة فقط كل بضع سنوات:
إذا كنت تستخدم ES6 ، مع معلمة REST ، فإن أيا من المشكلات المذكورة أعلاه مشكلة. لاحظ أن إضافة ثلاث نقاط قبل Array Args ليس خطأ في بناء الجملة ، ولكن طريقة كتابة معلمة REST التي توفرها ES6. يمكنك فهمها على أنها استبدال ... Args مع Args Array مع شخصيات بعد قوسين مربعة.
ولكن هل من المستحيل حقًا تنفيذها في ES5؟ بعد كل شيء ، معظم ES6 هو سكر النحوي ، ويمكنك استخدام أدوات مثل بابل لتجميع ES5. مع الأسئلة ، دعونا نستخدم بابل لتجميع ونرى ما نحصل عليه:
لقد صدمت عندما رأيت السطر الأخير. لا تخف. دعونا نحلل هذا الرمز. أولاً ، دعونا نقطعها وننظر إليها في ثلاث خطوات:
1. ليس هناك شك في أن استخدام Concat to Concatenate Null مع معلماتنا في صفيف ، كما تم تطبيق المعلمة الثانية ، أي [NULL ، 1 ، 2 ، 3] ؛
2. دعنا نحسب تطبيق. ستقوم المعلمة الأولى FOO باستبدال الوظيفة لاستدعاء طريقة الربط الأصلي. سيتم تمرير محتوى صفيف المعلمة الثاني كمعلمة ربط ، أي ، foo.bind (null ، 1 ، 2 ، 3) ؛
3. المعلمة الأولى لطريقة الربط تشبه التطبيق والاتصال ، وتعديل هذا المؤشر ، ويمكن للمعلمات اللاحقة زرع قيمة الوسيطة الرائدة المسبقة للدالة. وهذا يعني ، عند تنفيذ الربط ، نحصل على فئة FOO مع ثلاث قيم معلمات تم حقنها في المجموعة الأولى من الأقواس ، والتي تسمى foowithargs في الوقت الحالي ؛
أخيرًا ، عندما نكون فويثارغز جديدة () ؛ ، لا نحتاج إلى تمرير أي معلمات. أي ما يعادل New Foo (1 ، 2 ، 3) ؛