في الوقت الحاضر ، فإن التطبيقات الأصلية وتطبيقات الويب هي التيار الرئيسي ، مما يعني أن أطراف تطبيقات الويب التي تعتمد على المتصفح المختلفة أصبحت أكثر وأكثر شعبية ، وأصبح أولئك الذين يقومون بمجتمعات JS أكثر وأكثر واعدة. قررت أيضًا الانتقال تدريجياً من التنمية الخلفية إلى التنمية الأمامية وتطوير الأجهزة المحمولة. دعونا لا نتحدث هراء ، دعنا نصل إلى موضوع "وظيفة رد الاتصال JS".
الحديث عن وظائف رد الاتصال ، على الرغم من أن الكثير من الناس يعرفون المعنى ، إلا أنهم لا يزال لديهم سوى عدد قليل من التفاهمات. أما بالنسبة لكيفية استخدامه ، فلا يزال مرتبكًا بعض الشيء. بعض الأشياء ذات الصلة على الإنترنت لم تشرح بالتفصيل ما حدث ، وهي أكثر من جانب واحد. بعد ذلك ، سأتحدث فقط عن فهمي الشخصي ، لا تنتقدني. دعنا نلقي نظرة على تعريف تقريبي "الوظيفة A لها معلمة ، وهذه المعلمة هي دالة ب. عند تنفيذ الوظيفة A ، يتم تنفيذ الوظيفة B. ثم تسمى هذه العملية رد الاتصال." تعني هذه الجملة أن الوظيفة B يتم تمريرها إلى الوظيفة A في شكل معلمة وتنفيذها بترتيب تنفيذ أول ، ثم تنفيذ المعلمات B ، B هي وظيفة رد الاتصال المزعومة. دعونا نلقي نظرة أولاً على المثال التالي.
نسخة الكود كما يلي:
وظيفة (رد الاتصال) {
تنبيه ('a') ؛
callback.call (هذا) ؛ // أو callback () ، callback.apply (هذا) ، اعتمادًا على التفضيل الشخصي
}
الوظيفة B () {
تنبيه ('b') ؛
}
//يتصل
أ (ب) ؛
والنتيجة هي أن "A" تنبثق أولاً و "B" تنبثق. وبهذه الطريقة ، قد يسأل شخص ما ، "ما الهدف من كتابة مثل هذا الرمز؟ لا يبدو أنه مفيد للغاية!"
نعم ، أعتقد في الواقع أنه من غير المعقول أن تكتب مثل هذا ، "إذا اتصلت بوظيفة ، فما عليك سوى الاتصال بها مباشرة في الوظيفة." أنا فقط أكتب مثالًا صغيرًا لك لإعطائك فهمًا أوليًا. نادراً ما يتم استخدام هذا النوع من المعلمات في عملية كتابة التعليمات البرمجية فعليًا ، لأنه في معظم السيناريوهات ، يتعين علينا نقل المعلمات. هنا معلمة:
نسخة الكود كما يلي:
الدالة C (رد الاتصال) {
تنبيه ('c') ؛
callback.call (هذا ، 'd') ؛
}
//يتصل
C (وظيفة (ه) {
تنبيه (هـ) ؛
}) ؛
هل تبدو هذه المكالمة مألوفة؟ هنا يتم تعيين المعلمة E إلى "D". نحن ببساطة نخصص القيمة لختلال الأحرف ، ولكن في الواقع يمكننا أيضًا تعيين القيمة للكائنات. هل هناك معلمة E في jQuery؟ لنتحدث عن ذلك أدناه
كيف يتم تعيين المعلمة E في jQuery عن طريق رد الاتصال؟
أعتقد أن الجميع على دراية بإطار JQuery. تم إصداره لفترة طويلة ويستخدم أثناء التطوير. انها بسيطة نسبيا. من المريح للغاية البحث في API عبر الإنترنت ومن السهل البدء. ضمن إطار عمل jQuery ، نحتاج أحيانًا إلى الحصول على بعض المعلمات في الحدث ، مثل إحداثيات النقرات الحالية وكائن العنصر للنقرة. من السهل التعامل مع هذا المطلب في jQuery:
نسخة الكود كما يلي:
$ ("#id"). bind ('Click' ، function (e) {
//e.pagex ، e.pagey ، e.target ...... بيانات مختلفة
}) ؛
إنه مناسب تمامًا للاستخدام. في الواقع ، يتم أيضًا تحقيق تعيين المعلمة E هذه من خلال وظيفة رد الاتصال. يتم تعيين هذه المعلمة قيمة كائن لها باستخدام معلمة رد الاتصال. كان ينبغي على الأصدقاء الذين درسوا بعناية أن يكتشف هذا الرمز المصدر jjquery.
هناك أيضًا نفس المبدأ في Ajax's $ .get ('' ، {} ، function (data) {}).
دعنا نلقي نظرة على كيفية تطبيق وظيفة رد الاتصال في كائن حدث jQuery.
للراحة ، كتبت ببساطة عن بعض التطبيقات المتعلقة بـ $. لقد كتبت قبل أن "Xiaotan jQuery" لديها طريقة قريبة نسبيًا لتنفيذ الإطار. أنا فقط أكتب محددًا بسيطًا أدناه.
نسخة الكود كما يلي:
<div id = "container">
</div>
<script>
var _ $ = function (id)
{
this.element = document.getElementById (id) ؛
}
_ $. النموذج الأولي = {
ربط: وظيفة (EVT ، رد الاتصال)
{
var that = هذا ؛
if (document.adDeventListener)
{
this.element.addeventListener (Evt ، function (e) {
callback.call (هذا ، that.standadize (e)) ؛
} ،خطأ شنيع)؛
}
آخر إذا (document.attachevent)
{
this.element.attachevent ('on'+evt ، function (e) {
callback.call (هذا ، that.standadize (e)) ؛
}) ؛
}
آخر
this.element ['on'+evt] = function (e) {
callback.call (هذا ، that.standadize (e)) ؛
} ؛
} ،
standadize: وظيفة (e) {
var evt = e || window.event ؛
var pagex ، pagey ، layerx ، lipyery ؛
.
إذا (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 ؛
}
إذا (evt.layerx)
{
layerx = evt.layerx ؛
lipyery = evt.layery ؛
}
آخر
{
layerx = evt.offsetx ؛
layerxy = evt.offsety ؛
}
يعود {
Pagex: Pagex ،
Pagey: Pagey ،
Layerx: Layerx ،
الطبقات: الطبقات
}
}
}
نافذة. $ = وظيفة (معرف)
{
إرجاع جديد _ $ (id) ؛
}
$ ('Container'). bind ('click' ، function (e) {
تنبيه (e.pagex) ؛
}) ؛
$ ('container1'). bind ('click' ، function (e) {
تنبيه (e.pagex) ؛
}) ؛
</script>
ننظر بشكل أساسي إلى تنفيذ وظيفة Standadize. لن أقول الكثير عن هذا الرمز ، كائن الإرجاع هو
نسخة الكود كما يلي:
يعود {
Pagex: Pagex ،
Pagey: Pagey ،
Layerx: Layerx ،
الطبقات: الطبقات
}
ثم انظر إلى رمز callback.call (هذا ، that.standadize (e)) في وظيفة الربط. يتم تعيين هذا الرمز بالفعل قيمة إلى المعلمة E ، والتي يتم تنفيذها باستخدام رد اتصال رد الاتصال.
يتم تمرير الوظيفة المجهولة عند استدعاء وظيفة رد الاتصال
نسخة الكود كما يلي:
دالة (هـ) {
}
callback.call (هذا ، هذا.
نسخة الكود كما يلي:
(وظيفة (ه) {
}) (standadize (e))
هذا هو أيضا الشيء الكلاسيكي حول jQuery باستخدام وظائف رد الاتصال. هذه هي الطريقة التي يتم بها تعيين المعلمة E. بعد قول هذا ، ربما يكون لديك فهم جيد لهذا وكيفية استخدامه.
يتم استخدام عمليات الاسترجاعات بشكل متكرر في أطر مختلفة. في بعض الأحيان عند كتابة شيء بنفسك ، يمكنك أيضًا استخدامه وفقًا للوضع الفعلي.