إن استخدام الوظائف الثلاث استدعاء وتطبيق وربط هو نقطة معرفة لا يمكن التغلب عليها من خلال تعلم لغة JavaScript. اسمحوا لي أن ألخص استخدام الثلاثة منهم وسيناريوهات التطبيق المشتركة.
أولاً ، انظر إلى وظيفة المكالمات ، والتي يمكن فهمها على أنها "اقتراض" و "طلب". تخيل السيناريو التالي: أنت تتجول بمفردك وتريد الاتصال بالمنزل إذا كان لديك مسائل عاجلة ، ولكن لسوء الحظ ، فإن هاتفك مستحق ، أو أنه خارج السلطة ، أو يقع في حفرة. باختصار ، هاتفك لا يعمل. ولكن عليك إجراء هذه المكالمة ، حتى تتمكن من استعارة الهاتف الخلوي لصديق أو هاتف خلوي للجار أو الهاتف العام. وبهذه الطريقة ، يمكنك إكمال المكالمة دون توفر هاتفك. أما بالنسبة لهاتفك الذي تستخدمه ، فلا يهم. على أي حال ، إنه نفس تأثير إجراء مكالمة مع هاتفك. النية الأصلية لوظيفة الاتصال تشبه هذا أيضًا. اسمحوا لي أن أستخدم الكود لمحاكاة سيناريو التطبيق الخاص به:
var frog = {name: 'frog' ، say: function () {Alert (this.name) ؛ }} var rabbit = {name: 'rabbit'} frog.say.call (rubbit) // rabbitRubbit هو كائن غبي ، ولكن إذا أراد أن يقول اسمه ، فمن المستحيل تحقيقه بقدرته الخاصة. لحسن الحظ ، لديها صديق جيد يدعى Frog ، والذي يمكنه التحدث. لذلك ، طلب Rubbit Frog إدراك هذه الرغبة في ذلك. يجب ملء المعلمة الأولى لـ Frog.say.call () في الشخص الذي أصدر الطلب ، ويحب المحامي تسميته العميل. فيما يلي ضفدع طلب Rubbit ليقول اسمه ، لذا املأ Rubbit. وبهذه الطريقة ، عند قوله ، سيتم البحث في اسم Rubbit بدلاً من اسم الضفدع. كيف ستبدو إذا ملأت الضفدع هنا؟ إنه مثل مطالبة نفسك بفعل شيء ما ، وإطعام نفسك بالملح. يمكنك تجربته:
var frog = {name: 'frog' ، say: function () {Alert (this.name) ؛ }} var rabbit = {name: 'rabbit'} frog.say.call (frog) // frogيجب أن يكون إطعام كيس من الملح اسمك ، وهذا ليس أمرًا غير متوقع. دعونا نلقي نظرة على الاستخدام الكلاسيكي للمكالمة:
// تحويل المعلمات إلى دالة كائن صفيف حقيقي frog () {var arr = [] .slice.call (وسيطات) ؛ console.log (enduments.slice ، arr.slice) // undefined function slice () {[native code]}} frog (1،2،3،4)بعد هذه المكالمة ، يمكننا استخدام كائن الوسائط ككائن صفيف. هناك العديد من الطرق لاستخدام المكالمة. إذا قمت بفتح الكود المصدري لـ jQuery ، فيمكنك بسهولة العثور على العديد من الأماكن لاستخدامها. لن أدرجهم جميعًا هنا ، لكنني سأعود إلى مكان الحادث أمامنا. من السهل جدًا استعارة مكالمة هاتفية. بعد إجراء مكالمة هاتفية ، سأريد بالتأكيد إعادة شيء ما. بعد كل شيء ، كنت أتجول لسنوات عديدة ولم أكن في حالة كبار السن واشتريت بعض التخصصات المحلية للعودة. إنه أمر رائع بالتأكيد. ومع ذلك ، فإن ضغط الحياة في الخارج رائع لدرجة أنه بالإضافة إلى العمل ، هناك أيضًا عمل إضافي كل يوم. إذا أخذت إجازة ، فلن يتم خصم راتبك فحسب ، بل سيتعين عليك أيضًا إنفاق الكثير من نفقات السفر. ربما يكون مجموع هذه الأموال كافية لكبار السن لقضاء عام في المنزل. لم يكن من التكلفة التفكير في الأمر ، لذلك فكرت في وظيفة المكالمات مرة أخرى. إن طلب المساعدة ، إنه خيار حكيم للغاية لاستعادته بالمناسبة ، ولا يشحن ، لا يحد من الكمية ، ولا يحد من الوزن ، ويمكن أن يجلب بقدر ما لديك. سأستخدم الرمز لإظهاره مرة أخرى:
var frog = {name: 'frog' ، send: function (money ، food ، milk ، suagate) {Alert (money+food+milk+suagate) ؛ }} var rabbit = {name: 'rabbit'} frog.send.call (rubbit ، 'Money' ، 'Food' ، 'Milk' ، 'Suagate)إذا كنت غنيًا وممتعًا ، فيمكنك حتى إرسال عدد قليل من iPhone6 زائد أو شيء ما. .^_^.
الحديث عن هذا ، انتهت المكالمة تقريبًا. لا أعرف ما إذا كانت دراما المشهد أعلاه تجعلك تفهم ما هي المكالمة. إذا كان يثير حنينك ، فأنا آسف.
المكالمة أيضا لديها الأخ غير الشقيق يسمى تطبيق. إذا فهمت استخدام المكالمة ، فإن تطبيقه هو في الواقع نفس الشيء. الفرق الوحيد هو أنه عندما لا يرغب Apply في نقل الأشياء ، يبدو من المزعج للغاية وضع شيء واحد في حقيبة ، وليس صديقًا للبيئة. لذلك قدم صندوقًا كبيرًا للأشياء ، ووضع كل الأشياء التي تريد نقلها في المربع الذي قدمته. هذا المربع الكبير هو صفيف. إذا تم إجراء المثال أعلاه مع تطبيق ، فهو مثل هذا:
var frog = {name: 'frog' ، send: function (money ، food ، milk ، suagate) {Alert (money+food+milk+suagate) ؛ }} var rabbit = {name: 'rabbit'} // انتبه إلى الفرق في المعلمات frog.send.apply (rubbit ، ['money' ، 'food' ، 'milk' ، 'suagate'])ما سبق هو الحياة الماضية والحالية من التطبيق ، اتصل. لكن بشكل غير متوقع ، تقدم بتقديم قدمه وتولى والد Call ثروة في العقارات قبل بضع سنوات ، وكان هناك طفل غير شرعي يدعى Bind Outside. على الرغم من أن شقيقيه يتصلان ويطبقان لأول مرة بعد بضع سنوات ، إلا أنه لا ينبغي التقليل من قدراتهما. ومع ذلك ، لم يتم التعرف على هويته في بعض الأماكن. على سبيل المثال ، IE6. بعد ذلك ، سأستخدم الكود لإظهار مهاراته:
var name = 'Rubbit' ؛ var frog = {name: 'frog' ، say: function () {setTimeout (function (money ، milk) {Alert (this.name+money+milk)} .bind (this ، 'money' ، 'milk') ، 1000)}} frog.say () ؛من خلال المقارنة ، وجد أن الربط يمكن أن يكون متصلاً مباشرة بـ Function () {}. إنه يعادل توفير المكالمات والتطبيق ، وتحديد المدير والمعلمات التي سيتم تمريرها مباشرة بعد الوظيفة. فيما يتعلق بأسلوب تمرير سيجما ، فهي أشبه بالمكالمة.
فيما يتعلق بربط ، دعونا نلقي نظرة على استخدام كلاسيكي آخر:
var obj = {name: 'frog'} document.addeventListener ('click' ، function () {Alert (this.name) ؛ // frog} .bind (obj) ، false) ؛لتلخيص ، تقدم ، اتصل ، ربط ، أوجه التشابه بين هؤلاء الإخوة الثلاثة هي:
1. المعلمة الأولى هي نطاق الحكومة ، أي أراضيها هي العمل.
2. يمكن تمرير جميع المعلمات
الاختلافات هي:
تطبيق ، المكالمة لديها توافق أفضل ، وربط بعض الإصدارات الأدنى من المتصفحات لا تدعمها.
يجب أن تكون المعلمات التي تم تمريرها بواسطة التطبيق ملفوفة في صفيف ، بينما يتم إدراج الاتصال والربط واحدًا تلو الآخر.
هل اكتسبت فهمًا أعمق لاستخدام الوظائف الثلاث ، وتطبيق ، وربط؟ آمل أن يكون هذا المقال مفيدًا لك.