أنا مشغول بشركة Android Projects مؤخرًا ، لذلك نادراً ما أستغرق وقتًا لكتابة شيء ما. بمجرد أن أصبحت حرة ، نظرت إلى ما رأيته من قبل. بعد القيام بنظام Android ، أشعر بأهمية تطوير الأجهزة المحمولة أكثر. الآن ، التطبيقات الأصلية وتطبيقات الويب هي التيار الرئيسي. وبعبارة أخرى ، ستصبح العديد من أطر تطبيقات الويب المستندة إلى المتصفح أكثر وأكثر شعبية ، وأصبح أولئك الذين يفعلون JS واعدة أكثر فأكثر. قررت أيضًا الانتقال تدريجياً من التنمية الخلفية إلى التنمية الأمامية وتطوير الأجهزة المحمولة. دعونا لا نتحدث هراء ، دعنا نصل إلى موضوع "وظيفة رد الاتصال JS".
الحديث عن وظائف رد الاتصال ، على الرغم من أن الكثير من الناس يعرفون المعنى ، إلا أنهم لا يزال لديهم سوى عدد قليل من التفاهمات. أما بالنسبة لكيفية استخدامه ، فلا يزال مرتبكًا بعض الشيء. بعض الأشياء ذات الصلة على الإنترنت لم تشرح بالتفصيل ما حدث ، وهي أكثر من جانب واحد. بعد ذلك ، سأتحدث فقط عن فهمي الشخصي ، لا تنتقدني. دعنا نلقي نظرة على تعريف تقريبي "الوظيفة A لها معلمة ، وهذه المعلمة هي دالة ب. عند تنفيذ الوظيفة A ، يتم تنفيذ الوظيفة B. ثم تسمى هذه العملية رد الاتصال." تعني هذه الجملة أن الوظيفة B يتم تمريرها إلى الوظيفة A في شكل معلمة وتنفيذها بترتيب تنفيذ أول ، ثم تنفيذ المعلمات B ، B هي وظيفة رد الاتصال المزعومة. دعونا نلقي نظرة أولاً على المثال التالي.
وظيفة (رد الاتصال) {Alert ('a') ؛ callback.call (this) ؛ // أو callback () ، callback.apply (this) ، اعتمادًا على التفضيل الشخصي} الوظيفة b () {Alert ('b') ؛ } // استدعاء a (b) ؛والنتيجة هي أن "A" تنبثق أولاً و "B" تنبثق. وبهذه الطريقة ، قد يسأل شخص ما ، "ما الهدف من كتابة مثل هذا الرمز؟ لا يبدو أنه مفيد للغاية!"
نعم ، أعتقد في الواقع أنه من غير المعقول أن تكتب مثل هذا ، "إذا اتصلت بوظيفة ، فما عليك سوى الاتصال بها مباشرة في الوظيفة." أنا فقط أكتب مثالًا صغيرًا لك لإعطائك فهمًا أوليًا. نادراً ما يتم استخدام هذا النوع من المعلمات في عملية كتابة التعليمات البرمجية حقًا ، لأنه في معظم السيناريوهات ، يتعين علينا نقل المعلمات. هنا معلمة:
الدالة C (رد الاتصال) {Alert ('c') ؛ callback.call (هذا ، 'd') ؛ } // call c (function (e) {Alert (e) ؛}) ؛هل تبدو هذه المكالمة مألوفة؟ هنا يتم تعيين المعلمة E إلى "D". نحن ببساطة نخصص القيمة لختلال الأحرف ، ولكن في الواقع يمكننا أيضًا تعيين القيمة للكائنات. هل هناك معلمة E في jQuery؟ لنتحدث عن ذلك أدناه
كيف يتم تعيين المعلمة E في jQuery عن طريق رد الاتصال؟
أعتقد أن الجميع على دراية بإطار JQuery. تم إصداره لفترة طويلة ويستخدم أثناء التطوير. انها بسيطة نسبيا. من المريح للغاية البحث في API عبر الإنترنت ومن السهل البدء. ضمن إطار عمل jQuery ، نحتاج أحيانًا إلى الحصول على بعض المعلمات في الحدث ، مثل إحداثيات النقرات الحالية وكائن العنصر للنقرة. من السهل التعامل مع هذا المطلب في jQuery:
$ ("#id"). bind ('click' ، function (e) {// e.pagex ، e.pagey ، e.target ....... data}) ؛إنه مناسب تمامًا للاستخدام. في الواقع ، يتم أيضًا تحقيق تعيين المعلمة E هذه من خلال وظيفة رد الاتصال. يتم تعيين هذه المعلمة قيمة كائن لها باستخدام معلمة رد الاتصال. كان ينبغي على الأصدقاء الذين درسوا بعناية أن يكتشف هذا الرمز المصدر jjquery.
هناك أيضًا نفس المبدأ في Ajax's $ .get ('' ، {} ، function (data) {}).
دعنا نلقي نظرة على كيفية تطبيق وظيفة رد الاتصال في كائن حدث jQuery.
للراحة ، كتبت ببساطة عن بعض التطبيقات المتعلقة بـ $. لقد كتبت قبل أن "Xiaotan jQuery" لديها طريقة قريبة نسبيًا لتنفيذ الإطار. أنا فقط أكتب محددًا بسيطًا أدناه.
<div id = "container"> </viv> <script> var _ $ = function (id) {this.element = document.getElementById (id) ؛ } _ $. النموذج الأولي = {bind: function (evt ، callback) {var that = this ؛ if (document.addeventListener) {this.element.addeventListener (evt ، function (e) {callback.call (هذا ، that.standadize (e)) ؛} ، false) ؛ } آخر if (document.attachevent) {this.element.attachevent ('on'+evt ، function (e) {callback.call (this ، that.standadize (e)) ؛}) ؛ } آخر هذا. } ؛ } ، standadize: function (e) {var evt = e || window.event ؛ var pagex ، pagey ، layerx ، lipyery ؛ // Pagex تنسيق الإحداثيات الأفقي page layerx layerx موجودة في طبقات الإحداثيات الأفقية التي تقع النقر في الإحداثيات العمودية للعنصر if (evt.pagex) {pagex = evt.pagex ؛ pagey = evt.pagey ؛ } آخر {pagex = document.body.scrollleft+evt.clientx-document.body.clientleft ؛ pagey = document.body.scrolltop+evt.clienty-document.body.clientltop ؛ } if (evt.layerx) {layerx = evt.layerx ؛ lipyery = evt.layery ؛ } آخر {layerx = evt.offsetx ؛ layerxy = evt.offsety ؛ } return {pagex: pagex ، pagey: pagey ، layerx: layerx ، lipyery: layery}}} window. $ = function (id) {return new _ $ (id) ؛ } $ ('Container'). bind ('click' ، function (e) {Alert (e.pagex) ؛}) ؛ $ ('Container1'). bind ('click' ، function (e) {Alert (e.pagex) ؛}) ؛ </script>ننظر بشكل أساسي إلى تنفيذ وظيفة Standadize. لن أقول الكثير عن هذا الرمز ، كائن الإرجاع هو
إرجاع {pagex: pagex ، pagey: pagey ، layerx: layerx ، lipyery: lipyery}ثم انظر إلى رمز callback.call (هذا ، that.standadize (e)) في وظيفة الربط. يتم تعيين هذا الرمز بالفعل قيمة إلى المعلمة E ، والتي يتم تنفيذها باستخدام رد اتصال رد الاتصال.
يتم تمرير الوظيفة المجهولة عند استدعاء وظيفة رد الاتصال
الدالة (هـ) {}callback.call (هذا ، هذا.
(الوظيفة (هـ) {}) (standadize (e))هذا هو أيضا الشيء الكلاسيكي حول jQuery باستخدام وظائف رد الاتصال. هذه هي الطريقة التي يتم بها تعيين المعلمة E. بعد قول هذا ، ربما يكون لديك فهم جيد لهذا وكيفية استخدامه.
يتم استخدام عمليات الاسترجاعات بشكل متكرر في أطر مختلفة. في بعض الأحيان عند كتابة شيء بنفسك ، يمكنك أيضًا استخدامه وفقًا للوضع الفعلي.
المشاهدات أعلاه في وظائف رد الاتصال في JS هي كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.