"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > مؤشر Javascript \"this\" في الوظائف المتداخلة: كيفية حل الارتباك؟

مؤشر Javascript \"this\" في الوظائف المتداخلة: كيفية حل الارتباك؟

تم النشر بتاريخ 2024-11-12
تصفح:178

Javascript \

مؤشر جافا سكريبت "هذا" في معضلة الوظائف المتداخلة

في سيناريو تطوير الويب، سلوك المؤشر "هذا" داخل الوظائف المتداخلة يمكن أن يكون محيرا. خذ بعين الاعتبار الكود التالي:

var std_obj = {
  options: {rows: 0, cols: 0},
  activeEffect: "none",
  displayMe: function() {
    // this refers to std_obj
    if (this.activeEffect == "fade") {}

    var doSomeEffects = function() {
      // this surprisingly refers to window object
      if (this.activeEffect == "fade") {}
    }

    doSomeEffects();
  }
};

std_obj.displayMe();

في الكود أعلاه، يشير المؤشر "هذا" داخل الوظيفة المتداخلة "doSomeEffects()" بشكل غير متوقع إلى كائن "النافذة". يتناقض هذا السلوك مع التوقع بأن الوظيفة المتداخلة سوف ترث نطاق الوظيفة الخارجية، حيث يشير "هذا" إلى "std_obj".

فهم استدعاء وظيفة جافا سكريبت ونطاقها

يعتمد سلوك "هذا" في وظائف Javascript على كيفية استدعاء الوظيفة. بشكل عام، هناك ثلاث طرق:

  1. استدعاء الأسلوب: someThing.someFunction(arg1, arg2, argN)
  2. استدعاء الدالة: someFunction.call(someThing, arg1, arg2, argN)
  3. Function.apply Invocation: someFunction.apply(someThing, [arg1, arg2, argN])

في كل هذه الدعوات، "هذا "الكائن سيكون "شيء ما". ومع ذلك، فإن استدعاء دالة بدون كائن أصل بادئ (على سبيل المثال، doSomeEffects() في المثال) سيؤدي بشكل عام إلى تعيين الكائن "هذا" إلى الكائن العام، والذي يكون في معظم المتصفحات كائن "نافذة".

في رمز المثال، يتم استدعاء الوظيفة المتداخلة "doSomeEffects()" بدون كائن أصل، لذلك ترث النطاق العام ويشير مؤشر "هذا" إلى كائن "نافذة". ولهذا السبب لاحظت السلوك غير المتوقع.

للتأكد من أن الوظيفة المتداخلة لديها حق الوصول إلى نطاق "std_obj"، يمكنك استدعاؤها باستخدام طريقة Function.call() مع كائن "std_obj" باعتباره الكائن الوسيطة الأولى:

var doSomeEffects = function() {
  // this now refers to std_obj
  if (this.activeEffect == "fade") {}
}

doSomeEffects.call(std_obj);

يعد فهم الفروق الدقيقة لسلوك المؤشر "هذا" في Javascript أمرًا بالغ الأهمية لبناء تطبيقات قوية وقابلة للصيانة.

بيان الافراج أعيد طبع هذه المقالة على: 1729291459 في حالة وجود أي انتهاك، يرجى الاتصال بـ [email protected] لحذفها
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3