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

كيفية الحفاظ على مرجع \"هذا\" عند استخدام setTimeout في JavaScript؟

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

How to Preserve the \

setTimeout و"this" بعيد المنال في JavaScript

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

المشكلة:

خذ بعين الاعتبار الكود التالي:

test.prototype.method = function() {
    //method2 returns image based on the id passed
    this.method2('useSomeElement').src = "http://www.some.url";
    timeDelay = window.setTimeout(this.method, 5000);
};

test.prototype.method2 = function(name) {
    for (var i = 0; i  1) {
            return document.images[i];
        }
    }
};

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

الحل:

تكمن المشكلة الأساسية في الطريقة التي يتعامل بها setTimeout. هذه الكلمة الأساسية. عند تعيين مهلة باستخدام setTimeout(this.method, 5000)، يتم فقدان السياق، مما يؤدي إلى الخطأ.

الحل الذكي لهذه المشكلة هو استخدام طريقة bind(). من خلال إلحاق ".bind(this)" بنهاية استدعاء الأسلوب، يمكن ربط السياق بشكل صريح، مما يضمن الحفاظ على المرجع الصحيح "هذا" حتى بعد انتهاء المهلة.

كود محسّن :

test.prototype.method = function() { // الأسلوب 2 يُرجع الصورة بناءً على المعرف الذي تم تمريره this.method2('useSomeElement').src = "http://www.some.url"; timeDelay = window.setTimeout(this.method.bind(this), 5000); // ^^^^^^^^^^^ test.prototype.method = function() { //method2 returns image based on the id passed this.method2('useSomeElement').src = "http://www.some.url"; timeDelay = window.setTimeout(this.method.bind(this), 5000); // ^^^^^^^^^^^ <- fix context };مع هذا التعديل، يتم ربط سياق "هذا" بشكل صحيح، مما يسمح للطريقة 2 بمواصلة العمل على النحو المنشود بعد انتهاء المهلة. هذا الأسلوب أنيق وفعال في الحفاظ على سياق التنفيذ الصحيح.

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

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

Copyright© 2022 湘ICP备2022001581号-3